private void dequeueEntry(final QueueEntry node, ServerTransaction txn) { txn.dequeue(node.getEnqueueRecord(), new ServerTransaction.Action() { @Override public void postCommit() { node.delete(); } @Override public void onRollback() { } }); }
@Override public void receiveBasicAck(final long deliveryTag, final boolean multiple) { if(LOGGER.isDebugEnabled()) { LOGGER.debug("RECV[" + _channelId + "] BasicAck[" +" deliveryTag: " + deliveryTag + " multiple: " + multiple + " ]"); } Collection<MessageConsumerAssociation> ackedMessages = _unacknowledgedMessageMap.acknowledge(deliveryTag, multiple); if (!ackedMessages.isEmpty()) { final Collection<MessageInstance> messages = Collections2.transform(ackedMessages, MESSAGE_INSTANCE_FUNCTION); _transaction.dequeue(messages, new MessageAcknowledgeAction(ackedMessages)); } /* The AMQP 0-9-1 spec requires to raise a channel exception "precondition-failed" when delivery tag is not valid: {quote} The server MUST validate that a non-zero delivery-tag refers to a delivered message, and raise a channel exception if this is not the case. On a transacted channel, this check MUST be done immediately and not delayed until a Tx.Commit. Specifically, a client MUST not acknowledge the same message more than once. {quote} The current broker behaviour is spec incompliant but it is kept for backward compatibility. It should close the channel as below: if (ackedMessages.isEmpty()) closeChannel(ErrorCodes.NOT_ALLOWED, "precondition-failed: Delivery tag '%d' is not valid."); */ }
public void acknowledge(final MessageInstanceConsumer consumer, final ConsumerTarget_0_10 target, final MessageInstance entry) { if (entry.makeAcquisitionUnstealable(consumer)) { _transaction.dequeue(entry.getEnqueueRecord(), new ServerTransaction.Action() { @Override public void postCommit() { entry.delete(); } @Override public void onRollback() { // The client has acknowledge the message and therefore have seen it. // In the event of rollback, the message must be marked as redelivered. entry.setRedelivered(); entry.release(consumer); } }); } }
private void discardEntry(final QueueEntry entry) { if(entry.acquire()) { ServerTransaction txn = new AutoCommitTransaction(getQueue().getVirtualHost().getMessageStore()); txn.dequeue(entry.getEnqueueRecord(), new ServerTransaction.Action() { @Override public void postCommit() { entry.delete(); } @Override public void onRollback() { } }); } }
txn.dequeue(entry.getEnqueueRecord(), new ServerTransaction.Action()
txn.dequeue(getEnqueueRecord(), new ServerTransaction.Action()
txn.dequeue(_queueEntry.getEnqueueRecord(), new ServerTransaction.Action()