@@ -19,7 +19,11 @@ public class RabbitMQMessageQueueService : IMessageQueueService
1919 private readonly ILogger < RabbitMQMessageQueueService > _logger ;
2020 private readonly string _connectionString ;
2121 private IConnection _connection ;
22- private IModel _channel ;
22+ // RabbitMQ.Client 7.0+ uses IChannel instead of IModel
23+ // RabbitMQ.Client 7.0+ 使用 IChannel 替代 IModel
24+ private IChannel _channel ;
25+ // RabbitMQ.Client 7.0+ uses AsyncEventingBasicConsumer
26+ // RabbitMQ.Client 7.0+ 使用 AsyncEventingBasicConsumer
2327 private readonly Dictionary < string , AsyncEventingBasicConsumer > _consumers ;
2428 private bool _disposed = false ;
2529
@@ -48,8 +52,8 @@ public async Task ConnectAsync()
4852 try
4953 {
5054 var factory = new ConnectionFactory { Uri = new Uri ( _connectionString ) } ;
51- _connection = factory . CreateConnection ( ) ;
52- _channel = _connection . CreateModel ( ) ;
55+ _connection = await factory . CreateConnectionAsync ( ) ;
56+ _channel = await _connection . CreateChannelAsync ( ) ;
5357 _logger . LogInformation ( "Connected to RabbitMQ" ) ;
5458 }
5559 catch ( Exception ex )
@@ -69,14 +73,14 @@ public async Task DisconnectAsync()
6973
7074 if ( _channel != null )
7175 {
72- _channel . Close ( ) ;
76+ await _channel . CloseAsync ( ) ;
7377 _channel . Dispose ( ) ;
7478 _channel = null ;
7579 }
7680
7781 if ( _connection != null )
7882 {
79- _connection . Close ( ) ;
83+ await _connection . CloseAsync ( ) ;
8084 _connection . Dispose ( ) ;
8185 _connection = null ;
8286 _logger . LogInformation ( "Disconnected from RabbitMQ" ) ;
@@ -95,8 +99,7 @@ public async Task DeclareExchangeAsync(string exchangeName, string exchangeType,
9599 throw new InvalidOperationException ( "RabbitMQ is not connected" ) ;
96100 }
97101
98- _channel . ExchangeDeclare ( exchangeName , exchangeType , durable : durable , autoDelete : false ) ;
99- await Task . CompletedTask ;
102+ await _channel . ExchangeDeclareAsync ( exchangeName , exchangeType , durable : durable , autoDelete : false ) ;
100103 }
101104
102105 /// <summary>
@@ -109,14 +112,14 @@ public async Task<string> DeclareQueueAsync(string queueName, bool durable = fal
109112 throw new InvalidOperationException ( "RabbitMQ is not connected" ) ;
110113 }
111114
112- var result = _channel . QueueDeclare (
115+ var result = await _channel . QueueDeclareAsync (
113116 queue : queueName ,
114117 durable : durable ,
115118 exclusive : exclusive ,
116119 autoDelete : autoDelete ,
117120 arguments : null ) ;
118121
119- return await Task . FromResult ( result . QueueName ) ;
122+ return result . QueueName ;
120123 }
121124
122125 /// <summary>
@@ -129,8 +132,7 @@ public async Task BindQueueAsync(string queueName, string exchangeName, string r
129132 throw new InvalidOperationException ( "RabbitMQ is not connected" ) ;
130133 }
131134
132- _channel . QueueBind ( queueName , exchangeName , routingKey ) ;
133- await Task . CompletedTask ;
135+ await _channel . QueueBindAsync ( queueName , exchangeName , routingKey ) ;
134136 }
135137
136138 /// <summary>
@@ -143,7 +145,7 @@ public async Task PublishAsync(string exchangeName, string routingKey, byte[] me
143145 throw new InvalidOperationException ( "RabbitMQ is not connected" ) ;
144146 }
145147
146- var basicProperties = _channel . CreateBasicProperties ( ) ;
148+ var basicProperties = new BasicProperties ( ) ;
147149
148150 if ( properties != null )
149151 {
@@ -167,8 +169,12 @@ public async Task PublishAsync(string exchangeName, string routingKey, byte[] me
167169 }
168170 }
169171
170- _channel . BasicPublish ( exchangeName , routingKey , basicProperties , message ) ;
171- await Task . CompletedTask ;
172+ await _channel . BasicPublishAsync (
173+ exchange : exchangeName ,
174+ routingKey : routingKey ,
175+ mandatory : false ,
176+ basicProperties : basicProperties ,
177+ body : new ReadOnlyMemory < byte > ( message ) ) ;
172178 }
173179
174180 /// <summary>
@@ -192,7 +198,7 @@ public async Task ConsumeAsync(string queueName, Func<byte[], MessageProperties,
192198 var consumer = new AsyncEventingBasicConsumer ( _channel ) ;
193199 _consumers [ queueName ] = consumer ;
194200
195- consumer . Received += async ( model , ea ) =>
201+ consumer . ReceivedAsync += async ( model , ea ) =>
196202 {
197203 try
198204 {
@@ -224,11 +230,11 @@ public async Task ConsumeAsync(string queueName, Func<byte[], MessageProperties,
224230 {
225231 if ( success )
226232 {
227- _channel . BasicAck ( ea . DeliveryTag , false ) ;
233+ await _channel . BasicAckAsync ( ea . DeliveryTag , false ) ;
228234 }
229235 else
230236 {
231- _channel . BasicNack ( ea . DeliveryTag , false , true ) ; // Requeue / 重新入队
237+ await _channel . BasicNackAsync ( ea . DeliveryTag , false , true ) ; // Requeue / 重新入队
232238 }
233239 }
234240 }
@@ -237,13 +243,12 @@ public async Task ConsumeAsync(string queueName, Func<byte[], MessageProperties,
237243 _logger . LogError ( ex , $ "Error processing message from queue { queueName } ") ;
238244 if ( ! autoAck )
239245 {
240- _channel . BasicNack ( ea . DeliveryTag , false , true ) ;
246+ await _channel . BasicNackAsync ( ea . DeliveryTag , false , true ) ;
241247 }
242248 }
243249 } ;
244250
245- _channel . BasicConsume ( queueName , autoAck , consumer ) ;
246- await Task . CompletedTask ;
251+ await _channel . BasicConsumeAsync ( queueName , autoAck , consumer ) ;
247252 }
248253
249254 /// <summary>
@@ -256,8 +261,7 @@ public async Task AckAsync(ulong deliveryTag)
256261 throw new InvalidOperationException ( "RabbitMQ is not connected" ) ;
257262 }
258263
259- _channel . BasicAck ( deliveryTag , false ) ;
260- await Task . CompletedTask ;
264+ await _channel . BasicAckAsync ( deliveryTag , false ) ;
261265 }
262266
263267 /// <summary>
@@ -270,8 +274,7 @@ public async Task RejectAsync(ulong deliveryTag, bool requeue = false)
270274 throw new InvalidOperationException ( "RabbitMQ is not connected" ) ;
271275 }
272276
273- _channel . BasicNack ( deliveryTag , false , requeue ) ;
274- await Task . CompletedTask ;
277+ await _channel . BasicNackAsync ( deliveryTag , false , requeue ) ;
275278 }
276279
277280 /// <summary>
0 commit comments