[rabbitmq-discuss] Ordering guarantees for multiple publishers, one queue and one consumer?
francesco at rabbitmq.com
Wed Sep 5 17:16:30 BST 2012
At Wed, 5 Sep 2012 16:30:05 +0300,
Tuure Laurinolli wrote:
> Assuming nodes A and B publish messages to exchange X with one queue Q that
> has one consumer C, is it possible to guarantee ordering of messages from A
> and B to C, assuming A and B have a side channel over which they can
> coordinate their actions but can't communicate with C directly? If they were
> able to communicate with C directly, the problem would be trivial, since B
> could ask C "Have you received a message from A?" and only publish if the
> answer is yes.
> Without being able to communicate with C, is it e.g. enough for A to do a
> transactional publish with mandatory flag, wait for commit-ok and only then
> give B signal that would allow B to do its publish? Will guarantee that the
> message from A will arrive to C before the message from B? It seems to me that
> AMQP 0-9-1 does not guarantee this (essentially allowing each incoming channel
> to have its own FIFO queue from with an outgoing channel would pull messages
> in undefined order). Does RabbitMQ offer stronger guarantees here?
As discussed on IRC, the answer is yes: with rabbit, after receiving an
confirm/commiting a transaction, messages published afterwards to the same queue
will come after. So your plan will work, and you don't even need transactions,
confirms are enough - and the mandatory flag is irrelevant here.
Francesco * Often in error, never in doubt
More information about the rabbitmq-discuss