2011/7/8 Torsten Curdt <span dir="ltr">&lt;<a href="mailto:tcurdt@vafer.org">tcurdt@vafer.org</a>&gt;</span><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

Hey,<br>
<br>
Let&#39;s say I have n producers sending messages to an exchange and m<br>
consumers consuming from a single queue bound to that exchange. When a<br>
consumer does not acknowledges a message (and dies), the message<br>
should go back into the queue for another consumer to pick it up.<br>
<br>
That should be easy to implement I assume?<br></blockquote><div><br>Yes, AMQP 0.9.1 has this feature built-in. See tutorial 2: <br><br><a href="http://www.rabbitmq.com/getstarted.html">http://www.rabbitmq.com/getstarted.html</a><br>

<br>and a longer example with multiple consumers in the Ruby amqp gem guide:<br><br><a href="http://rubydoc.info/github/ruby-amqp/amqp/master/file/docs/Queues.textile#Message_acknowledgements">http://rubydoc.info/github/ruby-amqp/amqp/master/file/docs/Queues.textile#Message_acknowledgements</a><br>

 </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
I also assume for this scenario a direct exchange would do?<br>
How bad would be the contention n and m are fairly large?<br>
...or do I just need to have enough broker?<br>
<br></blockquote><div><br>Sorry, what are n and m? Message acknowledgements have very low overhead and redeliveries typically do not happen<br>often enough to create any contention.<br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">


I would also like to be able to &quot;tap into&quot; the stream of messages<br>
flowing through the exchange. I assume I could use a fanout exchange<br>
instead. Have the normal queue with the m consumers and a second queue<br>
with a single consumer &quot;tapping in&quot;.<br>
<br>
As the throughput of message can potentially be very high (which is<br>
why there are so many consumers) of course a single consumer cannot<br>
drain the second queue. So my idea was to only care about every n-th<br>
message.<br>
<br>
Is there a away to tell the fanout consumer to deliver every message<br>
to Q1 but only every 10th message to Q2?<br>
How else could one do this?<br>
<br></blockquote><div><br>Every solution I can think of will require producers to keep track of message sequences. Take a look at<br><a href="http://www.rabbitmq.com/extensions.html#sender-selected-distribution">http://www.rabbitmq.com/extensions.html#sender-selected-distribution</a>.<br>

</div></div><br>-- <br>MK<br><br><a href="http://github.com/michaelklishin" target="_blank">http://github.com/michaelklishin</a><br><a href="http://twitter.com/michaelklishin" target="_blank">http://twitter.com/michaelklishin</a><br>

<br>