diff --git a/QuestionLibraryMQConsumer/Entities/Book.cs b/QuestionLibraryMQConsumer/Entities/Book.cs
index 48d5b7f..67a1d60 100644
--- a/QuestionLibraryMQConsumer/Entities/Book.cs
+++ b/QuestionLibraryMQConsumer/Entities/Book.cs
@@ -13,6 +13,11 @@ namespace QuestionLibraryMQConsumer.Entities
[SugarTable("book")]
public partial class Book : SqlSugarBaseEntity
{
+ public Book()
+ {
+
+
+ }
///
/// Desc:主键id
/// Default:
@@ -34,7 +39,7 @@ namespace QuestionLibraryMQConsumer.Entities
/// Default:
/// Nullable:False
///
- [SugarColumn(ColumnName = "totalpage")]
+ [SugarColumn(ColumnName = "totalPage")]
public int TotalPage { get; set; }
///
@@ -42,7 +47,7 @@ namespace QuestionLibraryMQConsumer.Entities
/// Default:
/// Nullable:False
///
- [SugarColumn(ColumnName = "verifypage")]
+ [SugarColumn(ColumnName = "verifyPage")]
public int VerifyPage { get; set; }
///
@@ -58,7 +63,7 @@ namespace QuestionLibraryMQConsumer.Entities
/// Default:
/// Nullable:True
///
- [SugarColumn(ColumnName = "pdfurl")]
+ [SugarColumn(ColumnName = "pdfUrl")]
public string PdfUrl { get; set; }
///
@@ -106,7 +111,7 @@ namespace QuestionLibraryMQConsumer.Entities
/// Default:
/// Nullable:True
///
- [SugarColumn(ColumnName = "backcover")]
+ [SugarColumn(ColumnName = "backCover")]
public string BackCover { get; set; }
///
@@ -114,7 +119,7 @@ namespace QuestionLibraryMQConsumer.Entities
/// Default:
/// Nullable:True
///
- [SugarColumn(ColumnName = "pdfpreviewurl")]
+ [SugarColumn(ColumnName = "pdfPreviewUrl")]
public string PdfPreviewUrl { get; set; }
///
@@ -130,7 +135,7 @@ namespace QuestionLibraryMQConsumer.Entities
/// Default:
/// Nullable:True
///
- [SugarColumn(ColumnName = "downloadbookpagepdfname")]
+ [SugarColumn(ColumnName = "downloadBookPagePdfName")]
public string Downloadbookpagepdfname { get; set; }
///
@@ -138,7 +143,7 @@ namespace QuestionLibraryMQConsumer.Entities
/// Default:b'0'
/// Nullable:False
///
- [SugarColumn(ColumnName = "is_deleted")]
+ [SugarColumn(ColumnName = "isDeleted")]
public bool IsDeleted { get; set; }
///
@@ -146,7 +151,7 @@ namespace QuestionLibraryMQConsumer.Entities
/// Default:
/// Nullable:True
///
- [SugarColumn(ColumnName = "created_by")]
+ [SugarColumn(ColumnName = "createdBy")]
public long? CreatedBy { get; set; }
///
@@ -154,7 +159,7 @@ namespace QuestionLibraryMQConsumer.Entities
/// Default:
/// Nullable:False
///
- [SugarColumn(ColumnName = "created_time")]
+ [SugarColumn(ColumnName = "createdTime")]
public DateTime CreatedTime { get; set; }
///
@@ -162,7 +167,7 @@ namespace QuestionLibraryMQConsumer.Entities
/// Default:
/// Nullable:True
///
- [SugarColumn(ColumnName = "updated_by")]
+ [SugarColumn(ColumnName = "updatedBy")]
public long? UpdatedBy { get; set; }
///
@@ -170,7 +175,7 @@ namespace QuestionLibraryMQConsumer.Entities
/// Default:
/// Nullable:True
///
- [SugarColumn(ColumnName = "updated_time")]
+ [SugarColumn(ColumnName = "updatedTime")]
public DateTime? UpdatedTime { get; set; }
///
@@ -194,7 +199,8 @@ namespace QuestionLibraryMQConsumer.Entities
/// Default:
/// Nullable:True
///
- [SugarColumn(ColumnName = "source_id")]
+ [SugarColumn(ColumnName = "sourceId")]
public long SourceId { get; set; }
+
}
}
diff --git a/QuestionLibraryMQConsumer/Entities/OtherSystem.cs b/QuestionLibraryMQConsumer/Entities/OtherSystem.cs
index 5c5f1b6..8cb74f9 100644
--- a/QuestionLibraryMQConsumer/Entities/OtherSystem.cs
+++ b/QuestionLibraryMQConsumer/Entities/OtherSystem.cs
@@ -11,7 +11,7 @@ namespace QuestionLibraryMQConsumer.Entities
///其他系统
///
[SugarTable("other_system")]
- public partial class OtherSystem : SqlSugarBaseEntity
+ public partial class OtherSystem
{
///
/// Desc:主键id
diff --git a/QuestionLibraryMQConsumer/Handlers/BookCreatedHandler.cs b/QuestionLibraryMQConsumer/Handlers/BookCreatedHandler.cs
index 7bdd759..3add96d 100644
--- a/QuestionLibraryMQConsumer/Handlers/BookCreatedHandler.cs
+++ b/QuestionLibraryMQConsumer/Handlers/BookCreatedHandler.cs
@@ -1,4 +1,6 @@
-using QuestionLibraryMQConsumer.Data;
+using Microsoft.Extensions.Options;
+using QuestionLibraryMQConsumer.Configuration;
+using QuestionLibraryMQConsumer.Data;
using QuestionLibraryMQConsumer.Entities;
using QuestionLibraryMQConsumer.Models;
using QuestionLibraryMQConsumer.Services;
@@ -6,6 +8,7 @@ using RabbitMQ.Client;
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Net;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
@@ -22,19 +25,26 @@ namespace QuestionLibraryMQConsumer.Handlers
private readonly ILogger _logger;
private readonly QuestionLibraryDb _db;
private readonly IOssService _ossService;
+ private readonly string _routingKey;
- public string RoutingKey => "questionLibrary.book.created";
+ public string RoutingKey => _routingKey;
public Type MessageType => typeof(BookCreatedMessage);
public bool RequiresManualAck => false;
public BookCreatedHandler(
ILogger logger,
QuestionLibraryDb db,
- IOssService ossService)
+ IOssService ossService,
+ IOptions rabbitMqOptions)
{
_logger = logger;
_db = db;
_ossService = ossService;
+
+ var handlerTypeName = nameof(BookCreatedHandler);
+ _routingKey = rabbitMqOptions.Value.Queues
+ .FirstOrDefault(q => q.HandlerType == handlerTypeName)
+ ?.RoutingKey ?? string.Empty;
}
public async Task HandleJsonAsync(string messageJson, CancellationToken cancellationToken)
@@ -86,17 +96,20 @@ namespace QuestionLibraryMQConsumer.Handlers
if (!string.IsNullOrEmpty(pdfUrl))
{
- copyTasks.Add(CopyUrlAsync("PdfUrl", pdfUrl, otherSystem, newUrl => pdfUrl = newUrl, cancellationToken));
+ var pdfExt = Path.GetExtension(pdfUrl);
+ copyTasks.Add(CopyUrlAsync("PdfUrl", pdfUrl, $"book/{message.BookId}/book{pdfExt}", otherSystem, newUrl => pdfUrl = newUrl, cancellationToken));
}
if (!string.IsNullOrEmpty(coverUrl))
{
- copyTasks.Add(CopyUrlAsync("CoverUrl", coverUrl, otherSystem, newUrl => coverUrl = newUrl, cancellationToken));
+ var coverExt = Path.GetExtension(coverUrl);
+ copyTasks.Add(CopyUrlAsync("CoverUrl", coverUrl, $"book/{message.BookId}/cover{coverExt}", otherSystem, newUrl => coverUrl = newUrl, cancellationToken));
}
if (!string.IsNullOrEmpty(backCoverUrl))
{
- copyTasks.Add(CopyUrlAsync("BackCoverUrl", backCoverUrl, otherSystem, newUrl => backCoverUrl = newUrl, cancellationToken));
+ var backCoverExt = Path.GetExtension(backCoverUrl);
+ copyTasks.Add(CopyUrlAsync("BackCoverUrl", backCoverUrl, $"book/{message.BookId}/backCover{backCoverExt}", otherSystem, newUrl => backCoverUrl = newUrl, cancellationToken));
}
if (copyTasks.Count > 0)
@@ -130,11 +143,11 @@ namespace QuestionLibraryMQConsumer.Handlers
_logger.LogInformation("书籍 {BookId} 创建成功", message.BookId);
}
- private async Task CopyUrlAsync(string fieldName, string originalPath, OtherSystem otherSystem, Action setNewPath, CancellationToken cancellationToken)
+ private async Task CopyUrlAsync(string fieldName, string originalPath, string targetPath, OtherSystem otherSystem, Action setNewPath, CancellationToken cancellationToken)
{
try
{
- var newPath = await _ossService.CopyToOwnBucketAsync(originalPath, otherSystem.BucketName, cancellationToken);
+ var newPath = await _ossService.CopyToOwnBucketAsync(originalPath, otherSystem.BucketName, targetPath, cancellationToken);
setNewPath(newPath);
_logger.LogInformation("{FieldName} OSS复制成功: {OriginalPath} -> {NewPath}", fieldName, originalPath, newPath);
}
diff --git a/QuestionLibraryMQConsumer/Services/IOssService.cs b/QuestionLibraryMQConsumer/Services/IOssService.cs
index 9e9df8f..849a675 100644
--- a/QuestionLibraryMQConsumer/Services/IOssService.cs
+++ b/QuestionLibraryMQConsumer/Services/IOssService.cs
@@ -9,5 +9,5 @@ public interface IOssService
/// 源bucket名称
/// 取消令牌
/// 复制后的新URL
- Task CopyToOwnBucketAsync(string sourcePath, string sourceBucket, CancellationToken cancellationToken = default);
+ Task CopyToOwnBucketAsync(string sourcePath, string sourceBucket, string targetPath, CancellationToken cancellationToken = default);
}
diff --git a/QuestionLibraryMQConsumer/Services/OssService.cs b/QuestionLibraryMQConsumer/Services/OssService.cs
index 55a7f81..679671e 100644
--- a/QuestionLibraryMQConsumer/Services/OssService.cs
+++ b/QuestionLibraryMQConsumer/Services/OssService.cs
@@ -18,7 +18,7 @@ public class OssService : IOssService
_ossOptions = ossOptions.Value;
}
- public async Task CopyToOwnBucketAsync(string sourcePath, string sourceBucket, CancellationToken cancellationToken = default)
+ public async Task CopyToOwnBucketAsync(string sourcePath, string sourceBucket, string targetPath, CancellationToken cancellationToken = default)
{
if (string.IsNullOrEmpty(sourcePath))
{
@@ -34,13 +34,13 @@ public class OssService : IOssService
var client = new OssClient(_ossOptions.Endpoint, _ossOptions.AccessKeyID, _ossOptions.AccessKeySecret);
// 执行跨bucket复制
- var request = new CopyObjectRequest(sourceBucket, objectKey, _ossOptions.BucketName, objectKey);
+ var request = new CopyObjectRequest(sourceBucket, objectKey, _ossOptions.BucketName, targetPath);
var result = client.CopyObject(request);
_logger.LogInformation("OSS跨bucket复制成功: {SourceBucket}/{ObjectKey} -> {TargetBucket}/{TargetKey}, ETag: {ETag}",
- sourceBucket, objectKey, _ossOptions.BucketName, objectKey, result.ETag);
+ sourceBucket, objectKey, _ossOptions.BucketName, targetPath, result.ETag);
- return objectKey;
+ return targetPath;
}
catch (Exception ex)
{
diff --git a/QuestionLibraryMQConsumer/appsettings.json b/QuestionLibraryMQConsumer/appsettings.json
index 1e1384f..fc8ed78 100644
--- a/QuestionLibraryMQConsumer/appsettings.json
+++ b/QuestionLibraryMQConsumer/appsettings.json
@@ -10,25 +10,10 @@
"PrefetchCount": 10,
"Queues": [
{
- "QueueName": "questionLibrary.book.created.queue",
- "ExchangeName": "icr.direct",
- "RoutingKey": "questionLibrary.book.created",
- "Durable": true,
- "Exclusive": false,
- "AutoDelete": false
- },
- {
- "QueueName": "questionLibrary.book.created.queue",
- "ExchangeName": "question.library.exchange.dev",
- "RoutingKey": "questionLibrary.book.created",
- "Durable": true,
- "Exclusive": false,
- "AutoDelete": false
- },
- {
- "QueueName": "questionLibrary.book.created.queue",
- "ExchangeName": "question.library.exchange",
- "RoutingKey": "questionLibrary.book.created",
+ "QueueName": "mq.book.push",
+ "ExchangeName": "ex.book.direct",
+ "RoutingKey": "rk.book.push",
+ "HandlerType": "BookCreatedHandler",
"Durable": true,
"Exclusive": false,
"AutoDelete": false