<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2014-03-03 13:52 GMT+04:00 Li Li <span dir="ltr"><<a href="mailto:fancyerii@gmail.com" target="_blank">fancyerii@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<div id=":q5" class="" style="overflow:hidden">    I want to use something like a message queue to implement a<br>
distributed system. there are one producer and many consumers to<br>
balance the load. messages will be randomed dispatched to all the<br>
consumers. if one consumer receive a message, it will process this<br>
message. but sometimes this particular consumer will be unable to<br>
process this message, it can 'refuse' this message and other consumers<br>
can process this one?</div></blockquote></div><div class="gmail_extra"><br></div><div class="gmail_extra">There is a couple of ways to do it:</div><div class="gmail_extra"><br></div><div class="gmail_extra"> * Use a single queue per consumer (straightforward, not scalable with</div>

<div class="gmail_extra">large message volumes) and basic.reject. This will give you round-robin</div><div class="gmail_extra">distribution between consumers.</div><div><br></div><div>See tutorial 2:</div><div><a href="http://www.rabbitmq.com/getstarted.html">http://www.rabbitmq.com/getstarted.html</a> if this sounds appropriate for your case.</div>

<div><br></div><div> * Use a queue per consumer, (mostly) evenly distribute messages between them using</div><div>x-random or x-consistent-hash exchanges:</div><div><br></div><div><a href="https://github.com/jbrisbin/random-exchange">https://github.com/jbrisbin/random-exchange</a></div>

<div><a href="https://github.com/rabbitmq/rabbitmq-consistent-hash-exchange">https://github.com/rabbitmq/rabbitmq-consistent-hash-exchange</a><br></div><div><br></div><div>(the latter ships with recent RabbitMQ versions but need to be enabled</div>

<div>using rabbitmq-plugins).</div><div><br></div><div>In this case to refuse processing a message, consumers will have to republish them</div><div>to the exchange. This in turn requires more careful error handling logic in your consumers.</div>

<div><br></div><div>The latter approach is much more scalable.</div>-- <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>


</div></div>