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;
        }
コード例 #2
0
        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;
        }