[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