예제 #1
0
                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);
                }
예제 #2
0
 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);
         }
     }
 }
예제 #3
0
 private void PushMessage(CommittableIncomingMessage message)
 {
     Push(_stage.Out, message);
     _unackedMessages++;
     _outstandingMessages -= 1;
 }
 public Commit(CommittableIncomingMessage m)
 {
     AckCommand  = m.Ack;
     NackCommand = m.Nack;
 }