[rabbitmq-discuss] can rabbitmq(amqp) do this for me?
Michael Klishin
michael.s.klishin at gmail.com
Mon Mar 3 10:00:41 GMT 2014
2014-03-03 13:52 GMT+04:00 Li Li <fancyerii at gmail.com>:
> I want to use something like a message queue to implement a
> distributed system. there are one producer and many consumers to
> balance the load. messages will be randomed dispatched to all the
> consumers. if one consumer receive a message, it will process this
> message. but sometimes this particular consumer will be unable to
> process this message, it can 'refuse' this message and other consumers
> can process this one?
>
There is a couple of ways to do it:
* Use a single queue per consumer (straightforward, not scalable with
large message volumes) and basic.reject. This will give you round-robin
distribution between consumers.
See tutorial 2:
http://www.rabbitmq.com/getstarted.html if this sounds appropriate for your
case.
* Use a queue per consumer, (mostly) evenly distribute messages between
them using
x-random or x-consistent-hash exchanges:
https://github.com/jbrisbin/random-exchange
https://github.com/rabbitmq/rabbitmq-consistent-hash-exchange
(the latter ships with recent RabbitMQ versions but need to be enabled
using rabbitmq-plugins).
In this case to refuse processing a message, consumers will have to
republish them
to the exchange. This in turn requires more careful error handling logic in
your consumers.
The latter approach is much more scalable.
--
MK
http://github.com/michaelklishin
http://twitter.com/michaelklishin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/attachments/20140303/fbb27319/attachment.html>
More information about the rabbitmq-discuss
mailing list