[rabbitmq-discuss] Exactly Once Delivery

David Wragg david at rabbitmq.com
Thu Aug 5 15:16:50 BST 2010


Tony Garnock-Jones <tonyg at rabbitmq.com> writes:
> 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.

As an API spec, it's quite easy for JMS to mandate something apparently
impossible, without hinting at how it might actually be implemented.

Most of the spec says that the PERSISTENT delivery mode gives
"once-and-only-once" delivery.  But section 4.4.13 (of JMS 1.1) admits
that there are a number of caveats to this.  So it's really
"once-and-only-once-except-in-some-corner-cases".

I think the wrinkle that might prevent us saying that RabbitMQ gives the
same guarantees is on the publishing side.  The caveats in JMS all seems
to apply only to the consuming side.  But what happens with an AMQP
producer if the connection gets dropped before a tx.commit-ok gets back
to the client?  In that case the client has to re-publish, leading to a
potential dup.  This can be avoided by a de-dup filter on published
messages in the broker.  I don't know if JMS brokers really go to such
lengths.

David

-- 
David Wragg
Staff Engineer, RabbitMQ
SpringSource, a division of VMware


More information about the rabbitmq-discuss mailing list