public override async Task ListenAsync(string correlationId, IMessageReceiver receiver) { CheckOpened(correlationId); _logger.Trace(correlationId, "Started listening messages at {0}", this); GetSubscription().RegisterMessageHandler(async(envelope, cancellationToken) => { var message = ToMessage(envelope); if (message != null) { _counters.IncrementOne("queue." + Name + ".received_messages"); _logger.Debug(message.CorrelationId, "Received message {0} via {1}", message, this); } try { await receiver.ReceiveMessageAsync(message, this); } catch (Exception ex) { _logger.Error(correlationId, ex, "Failed to process the message"); throw; } // Don't finalize message here, it should be done by CompleteAsync method //await GetSubscription().CompleteAsync(envelope.SystemProperties.LockToken); }, new MessageHandlerOptions(exception => { _logger.Error(correlationId, exception.Exception, "Failed to process the message"); return(Task.CompletedTask); }) { AutoComplete = false, MaxConcurrentCalls = 1, MaxAutoRenewDuration = TimeSpan.FromMinutes(15) }); await Task.CompletedTask; }
public override async Task ListenAsync(string correlationId, IMessageReceiver receiver) { CheckOpened(correlationId); _logger.Trace(correlationId, "Started listening messages at {0}", this); _queueClient.RegisterMessageHandler(async(envelope, cancellationToken) => { var message = ToMessage(envelope); if (message != null) { _counters.IncrementOne("queue." + Name + ".received_messages"); _logger.Debug(message.CorrelationId, "Received message {0} via {1}", message, this); } try { await receiver.ReceiveMessageAsync(message, this); } catch (Exception ex) { _logger.Error(correlationId, ex, "Failed to process the message"); throw ex; } await _queueClient.CompleteAsync(envelope.SystemProperties.LockToken); }, new MessageHandlerOptions(exception => { _logger.Error(correlationId, exception.Exception, "Failed to process the message"); return(Task.CompletedTask); }) { AutoComplete = false, MaxConcurrentCalls = 1 }); await Task.CompletedTask; }