@@ -122,14 +122,24 @@ public class RawConsumer : AbstractEntity, IConsumer, IDisposable
122
122
private readonly Channel < Chunk > _chunksBuffer ;
123
123
private readonly ushort _initialCredits ;
124
124
125
+ private string ConsumerInfo ( )
126
+ {
127
+ var superStream = string . IsNullOrEmpty ( _config . SuperStream )
128
+ ? "No SuperStream"
129
+ : $ "SuperStream { _config . SuperStream } ";
130
+ return
131
+ $ "Consumer for stream: { _config . Stream } , reference: { _config . Reference } , OffsetSpec { _config . OffsetSpec } " +
132
+ $ "Client ProvidedName { _config . ClientProvidedName } , " +
133
+ $ "{ superStream } , IsSingleActiveConsumer: { _config . IsSingleActiveConsumer } , " +
134
+ $ "Token IsCancellationRequested: { Token . IsCancellationRequested } ";
135
+ }
136
+
125
137
private RawConsumer ( Client client , RawConsumerConfig config , ILogger logger = null )
126
138
{
127
139
_logger = logger ?? NullLogger . Instance ;
128
140
_initialCredits = config . InitialCredits ;
129
- _logger . LogDebug ( "creating consumer {Consumer} with initial credits {InitialCredits}, " +
130
- "offset {OffsetSpec}, is single active consumer {IsSingleActiveConsumer}, super stream {SuperStream}, client provided name {ClientProvidedName}" ,
131
- config . Reference , _initialCredits , config . OffsetSpec , config . IsSingleActiveConsumer , config . SuperStream ,
132
- config . ClientProvidedName ) ;
141
+ _config = config ;
142
+ _logger . LogDebug ( "Creating... {ConsumerInfo}" , ConsumerInfo ( ) ) ;
133
143
134
144
// _chunksBuffer is a channel that is used to buffer the chunks
135
145
_chunksBuffer = Channel . CreateBounded < Chunk > ( new BoundedChannelOptions ( _initialCredits )
@@ -141,7 +151,6 @@ private RawConsumer(Client client, RawConsumerConfig config, ILogger logger = nu
141
151
} ) ;
142
152
IsPromotedAsActive = true ;
143
153
_client = client ;
144
- _config = config ;
145
154
146
155
ProcessChunks ( ) ;
147
156
}
@@ -215,10 +224,18 @@ Message MessageFromSequence(ref ReadOnlySequence<byte> unCompressedData, ref int
215
224
}
216
225
catch ( Exception e )
217
226
{
218
- _logger . LogError ( e ,
219
- "Error while parsing message on the stream {Stream}, reference {Reference} The message will be skipped. " +
227
+ if ( Token . IsCancellationRequested )
228
+ {
229
+ _logger ? . LogDebug (
230
+ "Error while parsing message {ConsumerInfo}, Cancellation Requested, the consumer is closing. " ,
231
+ ConsumerInfo ( ) ) ;
232
+ return null ;
233
+ }
234
+
235
+ _logger ? . LogError ( e ,
236
+ "Error while parsing message {ConsumerInfo}. The message will be skipped. " +
220
237
"Please report this issue to the RabbitMQ team on GitHub {Repo}" ,
221
- _config . Stream , _config . Reference , Consts . RabbitMQClientRepo ) ;
238
+ ConsumerInfo ( ) , Consts . RabbitMQClientRepo ) ;
222
239
}
223
240
224
241
return null ;
@@ -254,8 +271,9 @@ async Task DispatchMessage(Message message, ulong i)
254
271
{
255
272
_logger . LogError ( e ,
256
273
"Error while filtering message. Message with offset {MessageOffset} won't be dispatched."
257
- + "Suggestion: review the PostFilter value function" ,
258
- message . MessageOffset ) ;
274
+ + "Suggestion: review the PostFilter value function"
275
+ + "{ConsumerInfo}" ,
276
+ message . MessageOffset , ConsumerInfo ( ) ) ;
259
277
canDispatch = false ;
260
278
}
261
279
}
@@ -271,8 +289,8 @@ await _config.MessageHandler(this,
271
289
else
272
290
{
273
291
_logger ? . LogDebug (
274
- "The consumer is not active for the stream {Stream} . message won't dispatched" ,
275
- _config . Stream ) ;
292
+ "{ConsumerInfo} is not active. message won't dispatched" ,
293
+ ConsumerInfo ( ) ) ;
276
294
}
277
295
}
278
296
}
@@ -281,14 +299,14 @@ await _config.MessageHandler(this,
281
299
catch ( OperationCanceledException )
282
300
{
283
301
_logger ? . LogWarning (
284
- "OperationCanceledException. The consumer id: {SubscriberId}, Stream:{Stream}, reference: {Reference } has been closed while consuming messages" ,
285
- _subscriberId , _config . Stream , _config . Reference ) ;
302
+ "OperationCanceledException. {ConsumerInfo } has been closed while consuming messages" ,
303
+ ConsumerInfo ( ) ) ;
286
304
}
287
305
catch ( Exception e )
288
306
{
289
307
_logger ? . LogError ( e ,
290
- "Error while processing chunk: { ChunkId} Stream:{Stream}, reference: {Reference}, Token IsCancellationRequested: {Token }" ,
291
- chunk . ChunkId , _config . Stream , _config . Reference , Token . IsCancellationRequested ) ;
308
+ "Error while Dispatching message, ChunkId : {ChunkId} {ConsumerInfo }" ,
309
+ chunk . ChunkId , ConsumerInfo ( ) ) ;
292
310
}
293
311
}
294
312
@@ -345,8 +363,8 @@ await _config.MessageHandler(this,
345
363
catch ( Exception e )
346
364
{
347
365
_logger ? . LogError ( e ,
348
- "Error while processing chunk: { ChunkId} Stream:{Stream}, reference: {Reference}, Token IsCancellationRequested: {Token }" ,
349
- chunk . ChunkId , _config . Stream , _config . Reference , Token . IsCancellationRequested ) ;
366
+ "Error while parsing chunk, ChunkId : {ChunkId} {ConsumerInfo }" ,
367
+ chunk . ChunkId , ConsumerInfo ( ) ) ;
350
368
}
351
369
}
352
370
@@ -377,7 +395,9 @@ await _chunksBuffer.Reader.WaitToReadAsync(Token).ConfigureAwait(false)) //
377
395
// The client will throw an InvalidOperationException
378
396
// since the connection is closed
379
397
// In this case we don't want to log the error to avoid log noise
380
- _logger ? . LogDebug ( "Can't send the credit: The TCP client has been closed" ) ;
398
+ _logger ? . LogDebug (
399
+ "Can't send the credit {ConsumerInfo}: The TCP client has been closed" ,
400
+ ConsumerInfo ( ) ) ;
381
401
break ;
382
402
}
383
403
@@ -394,8 +414,8 @@ await _chunksBuffer.Reader.WaitToReadAsync(Token).ConfigureAwait(false)) //
394
414
}
395
415
396
416
_logger ? . LogDebug (
397
- "The ProcessChunks for the stream: {Stream}, reference: {Reference } task has been closed normally" ,
398
- _config . Stream , _config . Reference ) ;
417
+ "The ProcessChunks {ConsumerInfo } task has been closed normally" ,
418
+ ConsumerInfo ( ) ) ;
399
419
}
400
420
catch ( Exception e )
401
421
{
@@ -405,14 +425,14 @@ await _chunksBuffer.Reader.WaitToReadAsync(Token).ConfigureAwait(false)) //
405
425
if ( Token . IsCancellationRequested )
406
426
{
407
427
_logger ? . LogDebug (
408
- "The ProcessChunks task for the stream: {Stream}, reference: {Reference} has been closed due to cancellation" ,
409
- _config . Stream , _config . Reference ) ;
428
+ "The ProcessChunks task for the stream: {ConsumerInfo} has been closed due to cancellation" ,
429
+ ConsumerInfo ( ) ) ;
410
430
return ;
411
431
}
412
432
413
433
_logger ? . LogError ( e ,
414
- "Error while process chunks the stream: {Stream}, reference: {Reference}. The ProcessChunks task will be closed" ,
415
- _config . Stream , _config . Reference ) ;
434
+ "Error while process chunks the stream: {ConsumerInfo} The ProcessChunks task will be closed" ,
435
+ ConsumerInfo ( ) ) ;
416
436
}
417
437
} , Token ) ;
418
438
}
@@ -463,6 +483,7 @@ private async Task Init()
463
483
}
464
484
}
465
485
486
+ var chunkConsumed = 0 ;
466
487
// this the default value for the consumer.
467
488
_config . StoredOffsetSpec = _config . OffsetSpec ;
468
489
var ( consumerId , response ) = await _client . Subscribe (
@@ -471,6 +492,7 @@ private async Task Init()
471
492
consumerProperties ,
472
493
async deliver =>
473
494
{
495
+ chunkConsumed ++ ;
474
496
// Send the chunk to the _chunksBuffer
475
497
// in this way the chunks are processed in a separate thread
476
498
// this wont' block the socket thread
@@ -480,9 +502,9 @@ private async Task Init()
480
502
// the consumer is closing from the user but some chunks are still in the buffer
481
503
// simply skip the chunk
482
504
_logger ? . LogTrace (
483
- "CancellationToken requested. The consumer is closing from the stream {Stream}, reference: {Reference}. " +
505
+ "CancellationToken requested. The {ConsumerInfo} " +
484
506
"The chunk won't be processed" ,
485
- _config . Stream , _config . Reference ) ;
507
+ ConsumerInfo ( ) ) ;
486
508
return ;
487
509
}
488
510
@@ -494,12 +516,13 @@ private async Task Init()
494
516
if ( crcCalculated != deliver . Chunk . Crc )
495
517
{
496
518
_logger ? . LogError (
497
- "CRC32 does not match, server crc: {ChunkCrc}, local crc: {CrcCalculated}, stream: {Stream}, token IsCancellationRequested: {Token}" ,
498
- deliver . Chunk . Crc , crcCalculated , _config . Stream , Token . IsCancellationRequested ) ;
519
+ "CRC32 does not match, server crc: {Crc}, local crc: {CrcCalculated}, {ConsumerInfo}, " +
520
+ "Chunk Consumed {ChunkConsumed}" , deliver . Chunk . Crc , crcCalculated , ConsumerInfo ( ) ,
521
+ chunkConsumed ) ;
499
522
500
523
throw new CrcException (
501
- $ "CRC32 does not match, server crc { deliver . Chunk . Crc } , local crc { crcCalculated } , " +
502
- $ "stream { _config . Stream } ") ;
524
+ $ "CRC32 does not match, server crc: { deliver . Chunk . Crc } , local crc: { crcCalculated } , { ConsumerInfo ( ) } , " +
525
+ $ "Chunk Consumed { chunkConsumed } ") ;
503
526
}
504
527
}
505
528
@@ -520,9 +543,9 @@ private async Task Init()
520
543
// important for the dispatcher messages
521
544
IsPromotedAsActive = promotedAsActive ;
522
545
_logger ? . LogDebug (
523
- "The consumer active status is: {IsActive} for the stream: {Stream}, reference: {Reference }" ,
546
+ "The consumer active status is: {IsActive} for {ConsumeInfo }" ,
524
547
IsPromotedAsActive ,
525
- _config . Stream , _config . Reference ) ;
548
+ ConsumerInfo ( ) ) ;
526
549
return _config . StoredOffsetSpec ;
527
550
}
528
551
) . ConfigureAwait ( false ) ;
@@ -557,21 +580,21 @@ public async Task<ResponseCode> Close()
557
580
catch ( TimeoutException )
558
581
{
559
582
_logger . LogError (
560
- "Timeout removing the consumer id: {SubscriberId}, stream {Stream}, reference {Reference } from the server. " +
583
+ "Timeout removing the consumer id: {SubscriberId}, {ConsumerInfo } from the server. " +
561
584
"The consumer will be closed anyway" ,
562
- _subscriberId , _config . Stream , _config . Reference ) ;
585
+ _subscriberId , ConsumerInfo ( ) ) ;
563
586
}
564
587
565
588
catch ( Exception e )
566
589
{
567
590
_logger . LogError ( e ,
568
- "Error removing the consumer id: {SubscriberId}, stream {Stream}, reference {Reference } from the server" ,
569
- _subscriberId , _config . Stream , _config . Reference ) ;
591
+ "Error removing the consumer id: {SubscriberId}, {ConsumerInfo } from the server" ,
592
+ _subscriberId , ConsumerInfo ( ) ) ;
570
593
}
571
594
572
595
var closed = await _client . MaybeClose ( $ "_client-close-subscriber: { _subscriberId } ") . ConfigureAwait ( false ) ;
573
596
ClientExceptions . MaybeThrowException ( closed . ResponseCode , $ "_client-close-subscriber: { _subscriberId } ") ;
574
- _logger . LogDebug ( "Consumer {SubscriberId} closed" , _subscriberId ) ;
597
+ _logger . LogDebug ( "{ConsumerInfo} is closed" , ConsumerInfo ( ) ) ;
575
598
576
599
return result ;
577
600
}
@@ -597,7 +620,7 @@ private void Dispose(bool disposing)
597
620
}
598
621
599
622
ClientExceptions . MaybeThrowException ( closeConsumer . Result ,
600
- $ "Error during remove producer. Subscriber: { _subscriberId } ") ;
623
+ $ "Error during remove producer. { ConsumerInfo ( ) } ") ;
601
624
}
602
625
finally
603
626
{
@@ -613,7 +636,7 @@ public void Dispose()
613
636
}
614
637
catch ( Exception e )
615
638
{
616
- _logger . LogError ( e , "Error during disposing of consumer: {SubscriberId }" , _subscriberId ) ;
639
+ _logger . LogError ( e , "Error during disposing of {ConsumerInfo }" , ConsumerInfo ( ) ) ;
617
640
}
618
641
finally
619
642
{
0 commit comments