diff --git a/src/Api/TakeoutSaaS.AdminApi/TakeoutSaaS.AdminApi.csproj b/src/Api/TakeoutSaaS.AdminApi/TakeoutSaaS.AdminApi.csproj
index a92defc..59d35a0 100644
--- a/src/Api/TakeoutSaaS.AdminApi/TakeoutSaaS.AdminApi.csproj
+++ b/src/Api/TakeoutSaaS.AdminApi/TakeoutSaaS.AdminApi.csproj
@@ -9,9 +9,9 @@
../../..
-
+
-
+
@@ -20,7 +20,7 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/src/Api/TakeoutSaaS.MiniApi/TakeoutSaaS.MiniApi.csproj b/src/Api/TakeoutSaaS.MiniApi/TakeoutSaaS.MiniApi.csproj
index 1fd145f..22d0212 100644
Binary files a/src/Api/TakeoutSaaS.MiniApi/TakeoutSaaS.MiniApi.csproj and b/src/Api/TakeoutSaaS.MiniApi/TakeoutSaaS.MiniApi.csproj differ
diff --git a/src/Api/TakeoutSaaS.UserApi/TakeoutSaaS.UserApi.csproj b/src/Api/TakeoutSaaS.UserApi/TakeoutSaaS.UserApi.csproj
index 2a31850..ed59abd 100644
Binary files a/src/Api/TakeoutSaaS.UserApi/TakeoutSaaS.UserApi.csproj and b/src/Api/TakeoutSaaS.UserApi/TakeoutSaaS.UserApi.csproj differ
diff --git a/src/Application/TakeoutSaaS.Application/TakeoutSaaS.Application.csproj b/src/Application/TakeoutSaaS.Application/TakeoutSaaS.Application.csproj
index f8b5ffd..9d43afd 100644
Binary files a/src/Application/TakeoutSaaS.Application/TakeoutSaaS.Application.csproj and b/src/Application/TakeoutSaaS.Application/TakeoutSaaS.Application.csproj differ
diff --git a/src/Core/TakeoutSaaS.Shared.Abstractions/TakeoutSaaS.Shared.Abstractions.csproj b/src/Core/TakeoutSaaS.Shared.Abstractions/TakeoutSaaS.Shared.Abstractions.csproj
index 2de50de..43219c2 100644
--- a/src/Core/TakeoutSaaS.Shared.Abstractions/TakeoutSaaS.Shared.Abstractions.csproj
+++ b/src/Core/TakeoutSaaS.Shared.Abstractions/TakeoutSaaS.Shared.Abstractions.csproj
@@ -6,5 +6,8 @@
true
1591
+
+
+
diff --git a/src/Core/TakeoutSaaS.Shared.Kernel/TakeoutSaaS.Shared.Kernel.csproj b/src/Core/TakeoutSaaS.Shared.Kernel/TakeoutSaaS.Shared.Kernel.csproj
index c52f050..db63687 100644
--- a/src/Core/TakeoutSaaS.Shared.Kernel/TakeoutSaaS.Shared.Kernel.csproj
+++ b/src/Core/TakeoutSaaS.Shared.Kernel/TakeoutSaaS.Shared.Kernel.csproj
@@ -7,5 +7,8 @@
+
+
+
diff --git a/src/Core/TakeoutSaaS.Shared.Web/TakeoutSaaS.Shared.Web.csproj b/src/Core/TakeoutSaaS.Shared.Web/TakeoutSaaS.Shared.Web.csproj
index ab9c720..f7a4f0e 100644
--- a/src/Core/TakeoutSaaS.Shared.Web/TakeoutSaaS.Shared.Web.csproj
+++ b/src/Core/TakeoutSaaS.Shared.Web/TakeoutSaaS.Shared.Web.csproj
@@ -11,14 +11,18 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/src/Domain/TakeoutSaaS.Domain/TakeoutSaaS.Domain.csproj b/src/Domain/TakeoutSaaS.Domain/TakeoutSaaS.Domain.csproj
index 3f9021d..fc99d63 100644
--- a/src/Domain/TakeoutSaaS.Domain/TakeoutSaaS.Domain.csproj
+++ b/src/Domain/TakeoutSaaS.Domain/TakeoutSaaS.Domain.csproj
@@ -9,5 +9,8 @@
+
+
+
diff --git a/src/Gateway/TakeoutSaaS.ApiGateway/TakeoutSaaS.ApiGateway.csproj b/src/Gateway/TakeoutSaaS.ApiGateway/TakeoutSaaS.ApiGateway.csproj
index 11ed7b8..207e703 100644
Binary files a/src/Gateway/TakeoutSaaS.ApiGateway/TakeoutSaaS.ApiGateway.csproj and b/src/Gateway/TakeoutSaaS.ApiGateway/TakeoutSaaS.ApiGateway.csproj differ
diff --git a/src/Infrastructure/TakeoutSaaS.Infrastructure/TakeoutSaaS.Infrastructure.csproj b/src/Infrastructure/TakeoutSaaS.Infrastructure/TakeoutSaaS.Infrastructure.csproj
index 06ca75d..931f2cc 100644
Binary files a/src/Infrastructure/TakeoutSaaS.Infrastructure/TakeoutSaaS.Infrastructure.csproj and b/src/Infrastructure/TakeoutSaaS.Infrastructure/TakeoutSaaS.Infrastructure.csproj differ
diff --git a/src/Modules/TakeoutSaaS.Module.Authorization/TakeoutSaaS.Module.Authorization.csproj b/src/Modules/TakeoutSaaS.Module.Authorization/TakeoutSaaS.Module.Authorization.csproj
index e1c880a..16cf38c 100644
Binary files a/src/Modules/TakeoutSaaS.Module.Authorization/TakeoutSaaS.Module.Authorization.csproj and b/src/Modules/TakeoutSaaS.Module.Authorization/TakeoutSaaS.Module.Authorization.csproj differ
diff --git a/src/Modules/TakeoutSaaS.Module.Delivery/TakeoutSaaS.Module.Delivery.csproj b/src/Modules/TakeoutSaaS.Module.Delivery/TakeoutSaaS.Module.Delivery.csproj
index ff77596..8001b38 100644
--- a/src/Modules/TakeoutSaaS.Module.Delivery/TakeoutSaaS.Module.Delivery.csproj
+++ b/src/Modules/TakeoutSaaS.Module.Delivery/TakeoutSaaS.Module.Delivery.csproj
@@ -10,5 +10,8 @@
+
+
+
diff --git a/src/Modules/TakeoutSaaS.Module.Dictionary/TakeoutSaaS.Module.Dictionary.csproj b/src/Modules/TakeoutSaaS.Module.Dictionary/TakeoutSaaS.Module.Dictionary.csproj
index b03dcec..8cb6277 100644
--- a/src/Modules/TakeoutSaaS.Module.Dictionary/TakeoutSaaS.Module.Dictionary.csproj
+++ b/src/Modules/TakeoutSaaS.Module.Dictionary/TakeoutSaaS.Module.Dictionary.csproj
@@ -9,4 +9,7 @@
+
+
+
diff --git a/src/Modules/TakeoutSaaS.Module.Messaging/Services/RabbitMqConnectionFactory.cs b/src/Modules/TakeoutSaaS.Module.Messaging/Services/RabbitMqConnectionFactory.cs
index 1ffa9dd..62935ef 100644
--- a/src/Modules/TakeoutSaaS.Module.Messaging/Services/RabbitMqConnectionFactory.cs
+++ b/src/Modules/TakeoutSaaS.Module.Messaging/Services/RabbitMqConnectionFactory.cs
@@ -12,7 +12,7 @@ public sealed class RabbitMqConnectionFactory(IOptionsMonitor o
///
/// 创建连接。
///
- public Task CreateConnectionAsync(CancellationToken cancellationToken = default)
+ public async Task CreateConnectionAsync(CancellationToken cancellationToken = default)
{
cancellationToken.ThrowIfCancellationRequested();
var options = optionsMonitor.CurrentValue;
@@ -25,6 +25,6 @@ public sealed class RabbitMqConnectionFactory(IOptionsMonitor o
VirtualHost = options.VirtualHost
};
- return Task.FromResult(factory.CreateConnection());
+ return await factory.CreateConnectionAsync(cancellationToken).ConfigureAwait(false);
}
}
diff --git a/src/Modules/TakeoutSaaS.Module.Messaging/Services/RabbitMqMessagePublisher.cs b/src/Modules/TakeoutSaaS.Module.Messaging/Services/RabbitMqMessagePublisher.cs
index 2319a23..3354ddc 100644
--- a/src/Modules/TakeoutSaaS.Module.Messaging/Services/RabbitMqMessagePublisher.cs
+++ b/src/Modules/TakeoutSaaS.Module.Messaging/Services/RabbitMqMessagePublisher.cs
@@ -14,7 +14,7 @@ public sealed class RabbitMqMessagePublisher(RabbitMqConnectionFactory connectio
: IMessagePublisher, IAsyncDisposable
{
private IConnection? _connection;
- private IModel? _channel;
+ private IChannel? _channel;
private bool _disposed;
///
@@ -26,16 +26,16 @@ public sealed class RabbitMqMessagePublisher(RabbitMqConnectionFactory connectio
var channel = _channel ?? throw new InvalidOperationException("RabbitMQ channel is not available.");
// 2. 声明交换机
- channel.ExchangeDeclare(options.Exchange, options.ExchangeType, durable: true, autoDelete: false);
+ await channel.ExchangeDeclareAsync(options.Exchange, options.ExchangeType, durable: true, autoDelete: false, arguments: null, noWait: false, cancellationToken).ConfigureAwait(false);
// 3. 序列化消息并设置属性
var body = serializer.Serialize(message);
- var props = channel.CreateBasicProperties();
+ var props = new BasicProperties();
props.ContentType = "application/json";
- props.DeliveryMode = 2;
+ props.DeliveryMode = DeliveryModes.Persistent;
props.MessageId = Guid.NewGuid().ToString("N");
// 4. 发布消息
- channel.BasicPublish(options.Exchange, routingKey, mandatory: false, basicProperties: props, body: body);
+ await channel.BasicPublishAsync(options.Exchange, routingKey, mandatory: false, basicProperties: props, body: body, cancellationToken).ConfigureAwait(false);
logger.LogDebug("发布消息到交换机 {Exchange} RoutingKey {RoutingKey}", options.Exchange, routingKey);
}
@@ -46,8 +46,8 @@ public sealed class RabbitMqMessagePublisher(RabbitMqConnectionFactory connectio
return;
}
- _connection ??= await connectionFactory.CreateConnectionAsync(cancellationToken);
- _channel = _connection.CreateModel();
+ _connection ??= await connectionFactory.CreateConnectionAsync(cancellationToken).ConfigureAwait(false);
+ _channel = await _connection.CreateChannelAsync(new CreateChannelOptions(false, false, null, null), cancellationToken).ConfigureAwait(false);
}
///
@@ -61,8 +61,19 @@ public sealed class RabbitMqMessagePublisher(RabbitMqConnectionFactory connectio
}
_disposed = true;
- _channel?.Dispose();
- _connection?.Dispose();
- return ValueTask.CompletedTask;
+ return CloseAsync();
+ }
+
+ private async ValueTask CloseAsync()
+ {
+ if (_channel != null)
+ {
+ await _channel.CloseAsync(CancellationToken.None).ConfigureAwait(false);
+ }
+
+ if (_connection != null)
+ {
+ await _connection.CloseAsync(CancellationToken.None).ConfigureAwait(false);
+ }
}
}
diff --git a/src/Modules/TakeoutSaaS.Module.Messaging/Services/RabbitMqMessageSubscriber.cs b/src/Modules/TakeoutSaaS.Module.Messaging/Services/RabbitMqMessageSubscriber.cs
index 608ee5a..f4a4c61 100644
--- a/src/Modules/TakeoutSaaS.Module.Messaging/Services/RabbitMqMessageSubscriber.cs
+++ b/src/Modules/TakeoutSaaS.Module.Messaging/Services/RabbitMqMessageSubscriber.cs
@@ -15,7 +15,7 @@ public sealed class RabbitMqMessageSubscriber(RabbitMqConnectionFactory connecti
: IMessageSubscriber
{
private IConnection? _connection;
- private IModel? _channel;
+ private IChannel? _channel;
private bool _disposed;
///
@@ -28,19 +28,19 @@ public sealed class RabbitMqMessageSubscriber(RabbitMqConnectionFactory connecti
var channel = _channel ?? throw new InvalidOperationException("RabbitMQ channel is not available.");
// 2. 声明交换机、队列及绑定
- channel.ExchangeDeclare(options.Exchange, options.ExchangeType, durable: true, autoDelete: false);
- channel.QueueDeclare(queue, durable: true, exclusive: false, autoDelete: false, arguments: null);
- channel.QueueBind(queue, options.Exchange, routingKey);
- channel.BasicQos(0, options.PrefetchCount, global: false);
+ await channel.ExchangeDeclareAsync(options.Exchange, options.ExchangeType, durable: true, autoDelete: false, arguments: null, noWait: false, cancellationToken).ConfigureAwait(false);
+ await channel.QueueDeclareAsync(queue, durable: true, exclusive: false, autoDelete: false, arguments: null, noWait: false, cancellationToken).ConfigureAwait(false);
+ await channel.QueueBindAsync(queue, options.Exchange, routingKey, arguments: null, noWait: false, cancellationToken).ConfigureAwait(false);
+ await channel.BasicQosAsync(0, options.PrefetchCount, global: false, cancellationToken).ConfigureAwait(false);
// 3. 设置消费者回调
var consumer = new AsyncEventingBasicConsumer(channel);
- consumer.Received += async (_, ea) =>
+ consumer.ReceivedAsync += async (_, ea) =>
{
var message = serializer.Deserialize(ea.Body.ToArray());
if (message == null)
{
- channel.BasicAck(ea.DeliveryTag, multiple: false);
+ await channel.BasicAckAsync(ea.DeliveryTag, multiple: false, cancellationToken).ConfigureAwait(false);
return;
}
@@ -56,16 +56,16 @@ public sealed class RabbitMqMessageSubscriber(RabbitMqConnectionFactory connecti
if (success)
{
- channel.BasicAck(ea.DeliveryTag, multiple: false);
+ await channel.BasicAckAsync(ea.DeliveryTag, multiple: false, cancellationToken).ConfigureAwait(false);
}
else
{
- channel.BasicNack(ea.DeliveryTag, multiple: false, requeue: false);
+ await channel.BasicNackAsync(ea.DeliveryTag, multiple: false, requeue: false, cancellationToken).ConfigureAwait(false);
}
};
// 4. 开始消费
- channel.BasicConsume(queue, autoAck: false, consumer);
+ await channel.BasicConsumeAsync(queue, autoAck: false, consumer, cancellationToken).ConfigureAwait(false);
}
private async Task EnsureChannelAsync(CancellationToken cancellationToken)
@@ -75,8 +75,8 @@ public sealed class RabbitMqMessageSubscriber(RabbitMqConnectionFactory connecti
return;
}
- _connection ??= await connectionFactory.CreateConnectionAsync(cancellationToken);
- _channel = _connection.CreateModel();
+ _connection ??= await connectionFactory.CreateConnectionAsync(cancellationToken).ConfigureAwait(false);
+ _channel = await _connection.CreateChannelAsync(new CreateChannelOptions(false, false, null, null), cancellationToken).ConfigureAwait(false);
}
///
@@ -88,10 +88,14 @@ public sealed class RabbitMqMessageSubscriber(RabbitMqConnectionFactory connecti
}
_disposed = true;
- await Task.Run(() =>
+ if (_channel != null)
{
- _channel?.Dispose();
- _connection?.Dispose();
- }).ConfigureAwait(false);
+ await _channel.CloseAsync(CancellationToken.None).ConfigureAwait(false);
+ }
+
+ if (_connection != null)
+ {
+ await _connection.CloseAsync(CancellationToken.None).ConfigureAwait(false);
+ }
}
}
diff --git a/src/Modules/TakeoutSaaS.Module.Messaging/TakeoutSaaS.Module.Messaging.csproj b/src/Modules/TakeoutSaaS.Module.Messaging/TakeoutSaaS.Module.Messaging.csproj
index 6ac643f..1350a29 100644
--- a/src/Modules/TakeoutSaaS.Module.Messaging/TakeoutSaaS.Module.Messaging.csproj
+++ b/src/Modules/TakeoutSaaS.Module.Messaging/TakeoutSaaS.Module.Messaging.csproj
@@ -5,15 +5,18 @@
enable
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Modules/TakeoutSaaS.Module.Scheduler/TakeoutSaaS.Module.Scheduler.csproj b/src/Modules/TakeoutSaaS.Module.Scheduler/TakeoutSaaS.Module.Scheduler.csproj
index b8a7787..ad73a3f 100644
--- a/src/Modules/TakeoutSaaS.Module.Scheduler/TakeoutSaaS.Module.Scheduler.csproj
+++ b/src/Modules/TakeoutSaaS.Module.Scheduler/TakeoutSaaS.Module.Scheduler.csproj
@@ -6,16 +6,19 @@
-
+
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/src/Modules/TakeoutSaaS.Module.Sms/TakeoutSaaS.Module.Sms.csproj b/src/Modules/TakeoutSaaS.Module.Sms/TakeoutSaaS.Module.Sms.csproj
index 7353ff4..7025f49 100644
--- a/src/Modules/TakeoutSaaS.Module.Sms/TakeoutSaaS.Module.Sms.csproj
+++ b/src/Modules/TakeoutSaaS.Module.Sms/TakeoutSaaS.Module.Sms.csproj
@@ -5,15 +5,18 @@
enable
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Modules/TakeoutSaaS.Module.Storage/TakeoutSaaS.Module.Storage.csproj b/src/Modules/TakeoutSaaS.Module.Storage/TakeoutSaaS.Module.Storage.csproj
index 733f714..e5ec475 100644
Binary files a/src/Modules/TakeoutSaaS.Module.Storage/TakeoutSaaS.Module.Storage.csproj and b/src/Modules/TakeoutSaaS.Module.Storage/TakeoutSaaS.Module.Storage.csproj differ
diff --git a/src/Modules/TakeoutSaaS.Module.Tenancy/TakeoutSaaS.Module.Tenancy.csproj b/src/Modules/TakeoutSaaS.Module.Tenancy/TakeoutSaaS.Module.Tenancy.csproj
index 2617cb0..db28803 100644
--- a/src/Modules/TakeoutSaaS.Module.Tenancy/TakeoutSaaS.Module.Tenancy.csproj
+++ b/src/Modules/TakeoutSaaS.Module.Tenancy/TakeoutSaaS.Module.Tenancy.csproj
@@ -10,4 +10,7 @@
+
+
+
diff --git a/tests/TakeoutSaaS.Application.Tests/TakeoutSaaS.Application.Tests.csproj b/tests/TakeoutSaaS.Application.Tests/TakeoutSaaS.Application.Tests.csproj
index 8c1ec99..0e333a1 100644
--- a/tests/TakeoutSaaS.Application.Tests/TakeoutSaaS.Application.Tests.csproj
+++ b/tests/TakeoutSaaS.Application.Tests/TakeoutSaaS.Application.Tests.csproj
@@ -9,12 +9,15 @@
-
+
-
+
-
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
@@ -25,4 +28,8 @@
+
+
+
+
diff --git a/tests/TakeoutSaaS.Integration.Tests/TakeoutSaaS.Integration.Tests.csproj b/tests/TakeoutSaaS.Integration.Tests/TakeoutSaaS.Integration.Tests.csproj
index f4bacfc..24ff938 100644
--- a/tests/TakeoutSaaS.Integration.Tests/TakeoutSaaS.Integration.Tests.csproj
+++ b/tests/TakeoutSaaS.Integration.Tests/TakeoutSaaS.Integration.Tests.csproj
@@ -9,13 +9,16 @@
-
-
-
-
+
+
+
+
-
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
@@ -29,4 +32,8 @@
+
+
+
+