[rabbitmq-discuss] Initial Questions on RabbitMQ and AMQP

Matthias Radestock matthias at rabbitmq.com
Tue Oct 25 22:37:48 BST 2011


Mark,

(since we are having a discussion about reliable message delivery, I 
figured I'd illustrate the point by sending a garbled message first ;)

On 25/10/11 21:51, Mark Petrovic wrote:
> 1) No ONCE-ONLY semantics. Messages may be sent twice by RabbitMQ to
> the consumer(s)

That only happens if something went wrong and, in effect, the message is 
"retried".

Once-only / exactly-once are tricky to define, and impossible to 
implement if taken literally. There has been some previous discussion on 
the subject. A quick search of the archives brings up

http://old.nabble.com/Exactly-Once-Delivery-td29333136.html
and
http://old.nabble.com/Cluster-failover-behaviour-td26785946.html#a26786952

> 2) Unordered; not FIFO delivery
> Would someone here be kind enough to talk about why section 4.7 of the
> 0.9.1 spec reads ever so slightly tortured?

The language in the spec is a bit tortured because it needs to define 
things in terms of observable/testable behaviours.

As Alexis said, think of email. Or even snail mail. And the 
circumstances under which you would expect order to be preserved.

One aspect not easily explained by these analogies is retries i.e. when, 
due to a failure or explicit rejection, a message that has been 
delivered to a client is re-queued and subsequently re-delivered. The 
spec says that no ordering guarantees hold at that point. And indeed it 
is difficult to define the guarantees here for all possible scenarios. 
But for common scenarios, say a single consumer that has received a 
bunch of messages and dies before acknowledging them, the ordering could 
be maintained. Currently RabbitMQ does not do that, but this will change 
in the next release.

Regards,

Matthias.


More information about the rabbitmq-discuss mailing list