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 @@ + + + +