@@ -49,6 +49,7 @@ public class RabbitMQMessageSubscriberService : IMessageBrokerSubscriberService
4949 private readonly string _portNumber ;
5050 private IModel ? _channel ;
5151 private bool _disposedValue ;
52+ private readonly ushort _prefetchCount = 1 ;
5253
5354 public event ConnectionErrorHandler ? OnConnectionError ;
5455
@@ -72,19 +73,23 @@ public RabbitMQMessageSubscriberService(IOptions<MessageBrokerServiceConfigurati
7273 _deadLetterExchange = configuration . SubscriberSettings [ ConfigurationKeys . DeadLetterExchange ] ;
7374 _deliveryLimit = int . Parse ( configuration . SubscriberSettings [ ConfigurationKeys . DeliveryLimit ] , NumberFormatInfo . InvariantInfo ) ;
7475 _requeueDelay = int . Parse ( configuration . SubscriberSettings [ ConfigurationKeys . RequeueDelay ] , NumberFormatInfo . InvariantInfo ) ;
76+ if ( configuration . SubscriberSettings . TryGetValue ( ConfigurationKeys . PrefetchCount , out var value ) )
77+ {
78+ _prefetchCount = ushort . Parse ( value ?? "1" , NumberFormatInfo . InvariantInfo ) ;
79+ }
7580
76- if ( configuration . SubscriberSettings . ContainsKey ( ConfigurationKeys . UseSSL ) )
81+ if ( configuration . SubscriberSettings . TryGetValue ( ConfigurationKeys . UseSSL , out var sslValue ) )
7782 {
78- _useSSL = configuration . SubscriberSettings [ ConfigurationKeys . UseSSL ] ;
83+ _useSSL = sslValue ;
7984 }
8085 else
8186 {
8287 _useSSL = string . Empty ;
8388 }
8489
85- if ( configuration . SubscriberSettings . ContainsKey ( ConfigurationKeys . Port ) )
90+ if ( configuration . SubscriberSettings . TryGetValue ( ConfigurationKeys . Port , out var portValue ) )
8691 {
87- _portNumber = configuration . SubscriberSettings [ ConfigurationKeys . Port ] ;
92+ _portNumber = portValue ;
8893 }
8994 else
9095 {
@@ -112,7 +117,7 @@ private void CreateChannel()
112117 _channel = _rabbitMqConnectionFactory . CreateChannel ( ChannelType . Subscriber , _endpoint , _username , _password , _virtualHost , _useSSL , _portNumber ) ?? throw new ServiceException ( "Failed to create a new channel to RabbitMQ" ) ;
113118 _channel . ExchangeDeclare ( _exchange , ExchangeType . Topic , durable : true , autoDelete : false ) ;
114119 _channel . ExchangeDeclare ( _deadLetterExchange , ExchangeType . Topic , durable : true , autoDelete : false ) ;
115- _channel . BasicQos ( prefetchSize : 0 , prefetchCount : 1 , global : false ) ;
120+ _channel . BasicQos ( prefetchSize : 0 , prefetchCount : _prefetchCount , global : false ) ;
116121 _channel . ModelShutdown += Channel_ModelShutdown ;
117122 _logger . ConnectedToRabbitMQ ( Name , _endpoint , _virtualHost ) ;
118123 } ) ;
@@ -234,15 +239,15 @@ private QueueDeclareOk DeclareQueues(string[] topics, string queue, ushort prefe
234239
235240 var queueDeclareResult = _channel ! . QueueDeclare ( queue : queue , durable : true , exclusive : false , autoDelete : false , arguments : arguments ) ;
236241
237- var deadLetterExists = QueueExists ( deadLetterQueue ) ;
238- if ( deadLetterExists . exists == false )
242+ var ( exists , accessable ) = QueueExists ( deadLetterQueue ) ;
243+ if ( exists == false )
239244 {
240245 _channel . QueueDeclare ( queue : deadLetterQueue , durable : true , exclusive : false , autoDelete : false ) ;
241246 }
242247
243248 try
244249 {
245- BindToRoutingKeys ( topics , queueDeclareResult . QueueName , deadLetterExists . accessable ? deadLetterQueue : "" ) ;
250+ BindToRoutingKeys ( topics , queueDeclareResult . QueueName , accessable ? deadLetterQueue : "" ) ;
246251 _channel . BasicQos ( 0 , prefetchCount , false ) ;
247252 }
248253 catch ( OperationInterruptedException operationInterruptedException )
0 commit comments