[rabbitmq-discuss] RabbitMQ and AMQP questions

Jerry Kuch jerryk at vmware.com
Thu Nov 3 20:23:28 GMT 2011

Hi, Mark:

Regarding 1:  In the presence of failures, defining once only semantics
isn't really possible and in some sense also isn't desirable (more on this

Regarding 2:  We could think of RabbitMQ deliveries as being FIFO in the 
absence of certain types of failures.  Consider how AMQP ACKs are used to 
implement a "transfer of responsibility" for messages.  If a message is 
delivered to a consumer that contains within it directions for some job 
for the consumer to perform, the proper behavior is for the consumer to 
ACK the message once he has completed the job.  At that point, the Rabbit
broker knows it no longer needs to care about the message and can be relieved
of its obligation to remember the message.  If the consumer had crashed 
after delivery, but before ACK-ing, its channel to the broker would close 
and the broker would re-queue the message for redelivery as without the client's
ACK, the broker never relinquished responsibility for maintaining the message's
existence.  Thus we have "FIFO in the regular case, but with re-queueing that 
potentially weakens that, with a net result that you actually want, when 
something goes wrong."

Make sense?

Best regards,

----- Original Message -----
From: "ae6rt" <mspetrovic at gmail.com>
To: rabbitmq-discuss at lists.rabbitmq.com
Sent: Tuesday, October 25, 2011 1:09:39 PM
Subject: [rabbitmq-discuss] RabbitMQ and AMQP questions

Good day.  I have read the RabbitMQ docs and the EAP RabbitMQ in
Action book.  And I'm in the process of evaluating AMQP and Rabbit
specifically for use in a major project.

I generally like what I see in Rabbit, but in the course of my
research, I have run across some statements about it that I would like
to understand better.  For example, this blog post


makes the following assertions about Rabbit:

1) No ONCE-ONLY semantics. Messages may be sent twice by RabbitMQ to
the consumer(s)

2) Unordered; not FIFO delivery

I'm actually not certain (1) is a criticism of AMQP or Rabbit.  On its
face, it seems morally neutral, yet at the same time it appears to
make an important point.  Some interpretation from people in the know
here would still be helpful and much appreciated.

As for (2), I recognize it as an oversimplication, after reading this
thread in this group:


The explanation by Matthias Radestock is helpful, but even after
reading his citation of the AMQP spec with respect to channels and
"single paths", I am still left with the sense that somehow AMQP
recognizes and codes to a world that is not quite so simple as "is- or
isNot-FIFO".  But I cannot put my finger on why, or what exactly is
being said.

Would someone here be kind enough to talk about why section 4.7 of the
0.9.1 spec reads ever so slightly tortured?

And a short discussion of (1) would be very helpful, too.

Thank you very kindly.

Mark P.

rabbitmq-discuss mailing list
rabbitmq-discuss at lists.rabbitmq.com

More information about the rabbitmq-discuss mailing list