Доставить точно один раз - PullRequest
1 голос
/ 15 мая 2019

Есть ли способ настроить «ровно один раз» обработку сообщения, доставленного с использованием обмена / очереди RabbitMQ? По сути, у нас есть приложение-потребитель, которое состоит из 2 узлов в кластере, оба эти узла будут подписываться на одну и ту же очередь в Rabbit, однако только один из этих двух узлов должен обрабатывать сообщение в данный момент времени. Моей первой мыслью было, что это будет работать прямо из коробки, учитывая, что кролик использует доставку сообщений «круговым методом», однако мы не можем гарантировать, что в будущем других потребителей не будет. Рекомендуется ли создавать конкретные очереди для каждого потребляющего приложения и использовать функцию назначения циклического перебора по умолчанию?

1 Ответ

0 голосов
/ 16 мая 2019

Дополнительный потребитель очереди будет частью потребления сообщений циклического перебора, так же, как существующие потребители. Каждое сообщение, перенаправленное на квоту, будет доставлено только одному потребителю.

Создание исключительной очереди для каждого потребляющего приложения приведет к проблеме обеспечения точно единой семантики. Это потребует, чтобы RabbitMQ направил каждое сообщение точно в одну из этих очередей. Чтобы это произошло, обмен должен проходить по кругу. Это невозможно в AMQP.

Используйте одну очередь и получайте сообщения из нее, используя столько рабочих, сколько вы хотите. Это даст вам ровно одну семантику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...