async Task IFilter <ConnectionContext> .Send(ConnectionContext context, IPipe <ConnectionContext> next) { var receiveSettings = context.GetPayload <ReceiveSettings>(); string queuePath = context.GetQueuePath(receiveSettings.QueueDescription); Uri inputAddress = context.GetQueueAddress(receiveSettings.QueueDescription); if (_log.IsDebugEnabled) { _log.DebugFormat("Creating message receiver for {0}", inputAddress); } MessagingFactory messagingFactory = await context.MessagingFactory.ConfigureAwait(false); MessageReceiver messageReceiver = await messagingFactory.CreateMessageReceiverAsync(queuePath, ReceiveMode.PeekLock) .ConfigureAwait(false); try { messageReceiver.PrefetchCount = receiveSettings.PrefetchCount; messageReceiver.RetryPolicy = RetryPolicy.Default; using (var receiver = new Receiver(messageReceiver, inputAddress, _receivePipe, receiveSettings, _receiveObserver, context.CancellationToken)) { await _endpointObserver.Ready(new Ready(inputAddress)) .ConfigureAwait(false); ReceiverMetrics metrics = await receiver.CompleteTask.ConfigureAwait(false); await _endpointObserver.Completed(new Completed(inputAddress, metrics)).ConfigureAwait(false); if (_log.IsDebugEnabled) { _log.DebugFormat("Consumer {0}: {1} received, {2} concurrent", queuePath, metrics.DeliveryCount, metrics.ConcurrentDeliveryCount); } } } catch { if (!messageReceiver.IsClosed) { await messageReceiver.CloseAsync().ConfigureAwait(false); } throw; } if (!messageReceiver.IsClosed) { await messageReceiver.CloseAsync().ConfigureAwait(false); } await next.Send(context).ConfigureAwait(false); }
async Task IFilter <ConnectionContext> .Send(ConnectionContext context, IPipe <ConnectionContext> next) { var receiveSettings = context.GetPayload <ReceiveSettings>(); var queuePath = context.GetQueuePath(receiveSettings.QueueDescription); var inputAddress = context.GetQueueAddress(receiveSettings.QueueDescription); if (_log.IsDebugEnabled) { _log.DebugFormat("Creating message receiver for {0}", inputAddress); } MessageReceiver messageReceiver = null; try { var messagingFactory = await context.MessagingFactory.ConfigureAwait(false); messageReceiver = await messagingFactory.CreateMessageReceiverAsync(queuePath, ReceiveMode.PeekLock).ConfigureAwait(false); messageReceiver.PrefetchCount = receiveSettings.PrefetchCount; using (var scope = _supervisor.CreateScope()) { var receiver = new Receiver(messageReceiver, inputAddress, _receivePipe, receiveSettings, _receiveObserver, scope); await scope.Ready.ConfigureAwait(false); await _endpointObserver.Ready(new Ready(inputAddress)).ConfigureAwait(false); scope.SetReady(); try { await scope.Completed.ConfigureAwait(false); } finally { ReceiverMetrics metrics = receiver; await _endpointObserver.Completed(new Completed(inputAddress, metrics)).ConfigureAwait(false); if (_log.IsDebugEnabled) { _log.DebugFormat("Consumer {0}: {1} received, {2} concurrent", queuePath, metrics.DeliveryCount, metrics.ConcurrentDeliveryCount); } } } } finally { if (messageReceiver != null && !messageReceiver.IsClosed) { await messageReceiver.CloseAsync().ConfigureAwait(false); } } await next.Send(context).ConfigureAwait(false); }
public Completed(Uri inputAddress, ReceiverMetrics metrics) { InputAddress = inputAddress; DeliveryCount = metrics.DeliveryCount; ConcurrentDeliveryCount = metrics.ConcurrentDeliveryCount; }
async Task IFilter <ConnectionContext> .Send(ConnectionContext context, IPipe <ConnectionContext> next) { var receiveSettings = context.GetPayload <ReceiveSettings>(); var queuePath = context.GetQueuePath(receiveSettings.QueueDescription); var inputAddress = context.GetQueueAddress(receiveSettings.QueueDescription); if (_log.IsDebugEnabled) { _log.DebugFormat("Creating message receiver for {0}", inputAddress); } QueueClient queueClient = null; try { var messagingFactory = await context.SessionMessagingFactory.ConfigureAwait(false); queueClient = messagingFactory.CreateQueueClient(queuePath); queueClient.PrefetchCount = receiveSettings.PrefetchCount; using (var scope = _supervisor.CreateScope($"{TypeMetadataCache<MessageReceiverFilter>.ShortName} - {inputAddress}")) { var receiver = new SessionReceiver(context, queueClient, inputAddress, _receivePipe, receiveSettings, _receiveObserver, scope); await scope.Ready.ConfigureAwait(false); await _endpointObserver.Ready(new Ready(inputAddress)).ConfigureAwait(false); scope.SetReady(); try { await scope.Completed.ConfigureAwait(false); } finally { ReceiverMetrics metrics = receiver; await _endpointObserver.Completed(new Completed(inputAddress, metrics)).ConfigureAwait(false); if (_log.IsDebugEnabled) { _log.DebugFormat("Consumer {0}: {1} received, {2} concurrent", queuePath, metrics.DeliveryCount, metrics.ConcurrentDeliveryCount); } } } } finally { if (queueClient != null && !queueClient.IsClosed) { await queueClient.CloseAsync().ConfigureAwait(false); } } await next.Send(context).ConfigureAwait(false); }