Замки и пакетная выборка сообщений с RabbitMq

Я пытаюсь использовать RabbitMq более нетрадиционным способом (хотя на данный момент я могу выбрать любую другую реализацию очереди сообщений, если это необходимо). Вместо того, чтобы оставить Rabbit push сообщения моим потребителям, потребитель подключается к очереди и получает пакет из N сообщений (в течение которого он потребляет некоторые и, возможно, отклоняет некоторые), после чего он переходит к другой очереди и так далее. Это делается для избыточности. Если некоторые потребители выходят из строя, все сообщения гарантированно будут потреблены другим потребителем.

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

Другие архитектурные предложения также приветствуются.

Спасибо!

EDIT: Как указано в комментарии, есть особенность в том, как мне нужно обрабатывать сообщения. Они имеют смысл только в группах, и есть большая вероятность, что связанные сообщения будут собраны вместе в очереди. Если, например, я получаю партию из 100 сообщений, есть большая вероятность, что я смогу что-то сделать с сообщениями 1-3, 4-5, 6-10 и т. д. Если мне не удастся найти группу для некоторых сообщений, я снова отправлю их в очередь. WorkQueue не будет работать, потому что она будет распределять сообщения из одной группы по нескольким рабочим, которые не будут знать, что с ними делать.

9
задан Cristian Vrabie 25 January 2012 в 16:42
поделиться