[rabbitmq-discuss] Exactly Once Delivery

Michael Bridgen mikeb at rabbitmq.com
Thu Aug 5 15:17:28 BST 2010


> John Apps wrote:
>> The JMS standard offers guaranteed once
> 
> What exactly do they mean by that? In particular, how do they deal with
> duplicates? Do they report failure, or silently let a dup through in certain
> situations? If you could point me to the part of the spec that sets out the JMS
> resolution of these issues, that's be really useful.

For consumers, JMS has client ack mode; the application acknowledges 
messages, and the server must not resend a message that has been 
acknowledged.

A failure in the connection may result in the server resending a message 
which the application thinks it has acknowledged.  The spec suggests 
"Since such clients cannot know for certain if a particular message has 
been acknowledged, they must be prepared for redelivery of the last 
consumed message.".  I.e., the client application has to have an 
idempotency barrier.

For producers, duplicate publishing is simply prohibited.  As for 
failure modes -- "A message that is redelivered due to session recovery 
is not considered a duplicate message."

So JMS cannot magically do "exactly once" any more than anything else.


--Michael


More information about the rabbitmq-discuss mailing list