@@ -35,24 +35,12 @@ private sealed class MessageEventArgs : EventArgs
3535 /// </summary>
3636 private event AsyncMessageHandler < MessageEventArgs > ? Received ;
3737
38- // How often to check if there are new messages
39- private const int PollDelayMsecs = 100 ;
40-
41- // How many messages to fetch at a time
42- private const int FetchBatchSize = 3 ;
43-
44- // How long to lock messages once fetched. Azure Queue default is 30 secs.
45- private const int FetchLockSeconds = 300 ;
46-
47- // How many times to dequeue a messages and process before moving it to a poison queue
48- private const int MaxRetryBeforePoisonQueue = 20 ;
49-
50- // Suffix used for the poison queues
51- private const string PoisonQueueSuffix = "-poison" ;
52-
5338 // Queue client builder, requiring the queue name in input
5439 private readonly Func < string , QueueClient > _clientBuilder ;
5540
41+ // Queue confirguration
42+ private readonly AzureQueuesConfig _config ;
43+
5644 // Queue client, once connected
5745 private QueueClient ? _queue ;
5846
@@ -77,6 +65,9 @@ public AzureQueuesPipeline(
7765 AzureQueuesConfig config ,
7866 ILogger < AzureQueuesPipeline > ? log = null )
7967 {
68+ this . _config = config ;
69+ this . _config . Validate ( ) ;
70+
8071 this . _log = log ?? DefaultLogger < AzureQueuesPipeline > . Instance ;
8172
8273 switch ( config . Auth )
@@ -161,14 +152,14 @@ public async Task<IQueue> ConnectToQueueAsync(string queueName, QueueOptions opt
161152 Response ? result = await this . _queue . CreateIfNotExistsAsync ( cancellationToken : cancellationToken ) . ConfigureAwait ( false ) ;
162153 this . _log . LogTrace ( "Queue ready: status code {0}" , result ? . Status ) ;
163154
164- this . _poisonQueue = this . _clientBuilder ( this . _queueName + PoisonQueueSuffix ) ;
155+ this . _poisonQueue = this . _clientBuilder ( this . _queueName + this . _config . PoisonQueueSuffix ) ;
165156 result = await this . _poisonQueue . CreateIfNotExistsAsync ( cancellationToken : cancellationToken ) . ConfigureAwait ( false ) ;
166157 this . _log . LogTrace ( "Poison queue ready: status code {0}" , result ? . Status ) ;
167158
168159 if ( options . DequeueEnabled )
169160 {
170- this . _log . LogTrace ( "Enabling dequeue on queue {0}, every {1} msecs" , this . _queueName , PollDelayMsecs ) ;
171- this . _dispatchTimer = new Timer ( PollDelayMsecs ) ; // milliseconds
161+ this . _log . LogTrace ( "Enabling dequeue on queue {0}, every {1} msecs" , this . _queueName , this . _config . PollDelayMsecs ) ;
162+ this . _dispatchTimer = new Timer ( this . _config . PollDelayMsecs ) ; // milliseconds
172163 this . _dispatchTimer . Elapsed += this . DispatchMessages ;
173164 this . _dispatchTimer . Start ( ) ;
174165 }
@@ -201,7 +192,7 @@ public void OnDequeue(Func<string, Task<bool>> processMessageAction)
201192
202193 try
203194 {
204- if ( message . DequeueCount <= MaxRetryBeforePoisonQueue )
195+ if ( message . DequeueCount <= this . _config . MaxRetriesBeforePoisonQueue )
205196 {
206197 bool success = await processMessageAction . Invoke ( message . MessageText ) . ConfigureAwait ( false ) ;
207198 if ( success )
@@ -271,7 +262,7 @@ private void DispatchMessages(object? sender, ElapsedEventArgs ev)
271262 try
272263 {
273264 // Fetch and Hide N messages
274- Response < QueueMessage [ ] > receiveMessages = this . _queue . ReceiveMessages ( FetchBatchSize , visibilityTimeout : TimeSpan . FromSeconds ( FetchLockSeconds ) ) ;
265+ Response < QueueMessage [ ] > receiveMessages = this . _queue . ReceiveMessages ( this . _config . FetchBatchSize , visibilityTimeout : TimeSpan . FromSeconds ( this . _config . FetchLockSeconds ) ) ;
275266 if ( receiveMessages . HasValue && receiveMessages . Value . Length > 0 )
276267 {
277268 messages = receiveMessages . Value ;
@@ -336,10 +327,10 @@ private async Task MoveMessageToPoisonQueueAsync(QueueMessage message, Cancellat
336327
337328 var poisonMsg = new
338329 {
339- MessageText = message . MessageText ,
330+ message . MessageText ,
340331 Id = message . MessageId ,
341- InsertedOn = message . InsertedOn ,
342- DequeueCount = message . DequeueCount ,
332+ message . InsertedOn ,
333+ message . DequeueCount ,
343334 } ;
344335
345336 var neverExpire = TimeSpan . FromSeconds ( - 1 ) ;
0 commit comments