public void Acknowledge(InboundMessageDispatch envelope, AckType ackType) { if (envelope.Message.Facade is AmqpNmsMessageFacade facade) { global::Amqp.Message message = facade.Message; switch (ackType) { case AckType.DELIVERED: envelope.IsDelivered = true; break; case AckType.ACCEPTED: AmqpTransactionContext transactionalState = session.TransactionContext; if (transactionalState != null) { receiverLink.Complete(message, transactionalState.GetTxnAcceptState()); transactionalState.RegisterTxConsumer(this); } else { receiverLink.Accept(message); } RemoveMessage(envelope); break; case AckType.RELEASED: receiverLink.Release(message); RemoveMessage(envelope); break; case AckType.MODIFIED_FAILED_UNDELIVERABLE: receiverLink.Modify(message, true, true); RemoveMessage(envelope); break; default: Tracer.Error($"Unsupported Ack Type for message: {envelope.Message}"); throw new ArgumentException($"Unsupported Ack Type for message: {envelope.Message}"); } } else { Tracer.ErrorFormat($"Received Ack for unknown message: {envelope}"); } }
private void HandleAccepted(InboundMessageDispatch envelope, global::Amqp.Message message) { Tracer.DebugFormat("Accepted Ack of message: {0}", envelope); if (session.IsTransacted) { if (!session.IsTransactionFailed) { var transactionalState = session.TransactionContext; receiverLink.Complete(message, transactionalState.GetTxnAcceptState()); transactionalState.RegisterTxConsumer(this); } else { Tracer.DebugFormat("Skipping ack of message {0} in failed transaction.", envelope); } } else { receiverLink.Accept(message); } RemoveMessage(envelope); }