public override void HandleBasicDeliver(string consumerTag, ulong deliveryTag, bool redelivered, string exchange, string routingKey, IBasicProperties properties, ReadOnlyMemory <byte> body) { var envelope = Envelope.Create(deliveryTag, redelivered, exchange, routingKey); var message = new IncomingMessage(ByteString.CopyFrom(body.ToArray()), envelope, properties); var committableMessage = new CommittableIncomingMessage( message, ack: multiple => { var promise = new TaskCompletionSource <Done>(); _commitCallback(new AckArguments(message.Envelope.DeliveryTag, multiple, promise)); return(promise.Task); }, nack: (multiple, requeue) => { var promise = new TaskCompletionSource <Done>(); _commitCallback(new NackArguments(message.Envelope.DeliveryTag, multiple, requeue, promise)); return(promise.Task); } ); _consumerCallback?.Invoke(committableMessage); }
private void HandleDelivery(CommittableIncomingMessage message) { if (IsAvailable(_stage.Out)) { PushMessage(message); } else { if (_queue.Count + 1 > _stage.BufferSize) { FailStage(new ApplicationException($"Reached maximum buffer size {_stage.BufferSize}")); } else { _queue.Enqueue(message); } } }
private void PushMessage(CommittableIncomingMessage message) { Push(_stage.Out, message); _unackedMessages++; _outstandingMessages -= 1; }
public Commit(CommittableIncomingMessage m) { AckCommand = m.Ack; NackCommand = m.Nack; }