[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