public async Task OnDelivery(RabbitMQDelivery delivery) { var correlationId = delivery.CorrelationId; if (correlationId == null || !contexts.TryRemove(correlationId, out var context)) { await delivery.TryReject(); return; } context.SetResult(delivery); }
public async Task Handle(RabbitMQChannel channel, BasicDeliverEventArgs source) { asyncContextAccessor.Set(channel); var delivery = new RabbitMQDelivery(channel.Model, acknowledgeMode, source); if (acknowledgeMode == AcknowledgeMode.BeforeHandling) { await delivery.TryAcknowledge(); } try { await handler.Handle(delivery); } catch (Exception ex) { await delivery.SetException(ex); } if (delivery.Exceptions.Any()) { switch (exceptionMode) { case ExceptionMode.Hold: return; case ExceptionMode.Reject: await delivery.TryReject(); return; case ExceptionMode.Unacknowledge: await delivery.TryUnacknowledge(); return; default: // Ignore break; } } if (acknowledgeMode == AcknowledgeMode.AfterHandling) { await delivery.TryAcknowledge(); } }
public void SetResult(RabbitMQDelivery result) => taskSource.SetResult(result);