[rabbitmq-discuss] ordering semantics
mikeb at lshift.net
Wed May 5 17:23:23 BST 2010
> I'm trying to get a handle on ordering semantics on the topic exchange.
> Assume there are two publishers, each on their own channel. Publishers
> produce a stream of messages. So:
> Publisher A produces A1, A2, A3 (in that order) Publisher B produces B1,
> B2, B3 (in that order)
> There is a single subscriber on a queue that all the messages produced
> by both publishers are targeted to.
> 1. Messages A1, A2, A3 are received in that order. Messages B1, B2, B3
> are received in that order. Correct?
Yes, in the absence of relivery due to e.g., recover.
> 2. Messages from A can be interleaved from B as in: A1, A2, B1, B2, B3,
> A3. (Still subject to the constraint from question 1 above) Correct?
> 3. In the event of a failure of a node in a cluster, messages may be
> lost, but do they still obey the strict ordering, even though messages
> may travel a different route in the cluster?
At the minute queues in a RabbitMQ cluster are located on a node; so, if
the node was lost, the queue would be lost, and the ordering moot.
> 4. I’m assuming that the ordering semantics guaranteed per-channel, correct?
The spirit of the ordering guarantee is more like "along a single route,
ordering between a single publisher and a single consumer is preserved".
Generally, the other consistency guarantees in AMQP 0-8/0-9-1 are scoped
to channels, though.
> 5.Can a subscriber determine a unique ID of the actual sender (i.e., can
> a subscriber know if a message was sent by A or B)?
One can use, for example, the message header "correlation-id" to label
messages from a particular publisher -- the broker won't touch it.
More information about the rabbitmq-discuss