<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; color: rgb(0, 0, 0); font-size: 14px; font-family: Calibri, sans-serif; "><div>Here at work, we've been having a spirited debate about the RabbitMQ descriptions on how HA/mirrored durable queues work. I apologize in advance if this seems like I'm splitting hairs below, but our team have some very specific questions regarding the exact wording. While nobody doubts the end result of mirroring, the mechanics of *exactly* how this happen are the subject of debate here. As the designated point person for RabbitMQ in our company, I'm responsible for driving these questions to closure.</div><div><br></div><div>First, I'll mention that we've read and re-read "Highly Available Queues" and "High Availability in RabbitMQ: solving part of the puzzle" multiple times.</div><div><br></div><div><a href="http://www.rabbitmq.com/ha.html">http://www.rabbitmq.com/ha.html</a></div><div><a href="http://www.rabbitmq.com/blog/2011/10/25/high-availability-in-rabbitmq-solving-part-of-the-puzzle">http://www.rabbitmq.com/blog/2011/10/25/high-availability-in-rabbitmq-solving-part-of-the-puzzle</a>/</div><div><br></div><div>The crux of the questions come down to these quotes:</div><div><br></div><div>--</div><div>"The slaves apply the operations that occur
to the master in exactly the same order as the master and
thus maintain the same state. All actions other than
publishes go only to the master, and the master then
broadcasts the effect of the actions to the slaves. Thus
clients consuming from a mirrored queue are in fact
consuming from the master."</div><div><br></div><div>and</div><div><br></div><div>"messages published to a mirrored-queue are always
published directly to the master and all slaves."</div><div>--</div><div><br></div><div>One interpretation of the 2nd quote above ("published directly to...") is that clients are responsible for writing their messages to the master *as well as* to all slaves. Perhaps there's some mechanism where at connect time, the master sends a list of servers to the connecting client, and the client writes to all instances in the list.</div><div><br></div><div>Other people have a different interpretation of how this works, which is that publishes to *any* broker instances are forwarded by the receiving slave to the master instance, which in turn pushes the publish requests to all slaves. (Of course, if the master received the message initially, there's no need for forwarding.)</div><div><br></div><div>Simple question: Which of the above interpretations is correct?</div><div><br></div><div>Follow up question: What is the exact flow for a publish that goes to a slave? Does the slave do anything other than push the message to the master, which in turn handles the message as if it came to the master in the first place? Perhaps it writes the message to the local store first, then pushes it to the master? (Like I said, spirited debate.)</div><div><br></div><div>Thanks much for your help,</div><div><br></div><div>Matt</div><div><br></div></body></html>