2013-05-22 2 views
1

У меня есть несколько уникальный вариант использования с RabbitMQ, и я не уверен, как решить проблему. Я хочу, чтобы одна очередь с несколькими потребителями привязана к ней, а затем RabbitMQ отправляет одно сообщение только одному пользователю в момент времени и ждет ACK перед отправкой другого сообщения любому другому потребителю.Отправить одно сообщение только одному из нескольких потребителей в RabbitMQ

Я понимаю, что это убивает пропускную способность и может по существу голодать у других потребителей, но для меня это нормально. Причина этого нечетного варианта использования заключается в том, что служба, с которой разговаривают потребители, может обрабатывать только один одновременный запрос за раз, поэтому мне нужен способ ограничить это, но потребители также могут умереть неожиданно, и мне нужен другой потребитель, чтобы забрать обработку сообщений если это произойдет. Я знаю, что есть опция prefetch, но она по-прежнему позволяет нескольким пользователям получать и эксклюзивные очереди, но я не уверен, что они выполняют то, что я хочу. Возможно ли настроить RabbitMQ для этого?

ответ

1

Нет; нет возможности ограничить конкурирующих потребителей в одной очереди, так что есть одно и только одно сообщение для всех потребителей до тех пор, пока не будет получено подтверждение.

Подобный вопрос возник некоторое время назад; Я не помню, было ли это здесь или на весенних форумах, но я считаю, что решение заключалось в том, чтобы потребители приобретали глобальную блокировку, используя что-то вроде hazelcast или даже простую блокировку строки таблицы базы данных (с prefetch = 1 поэтому каждый потребитель имел только одно сообщение «in process», которое было обработано, когда и каждый получил блокировку).

Смежные вопросы