2016-10-26 1 views
0

Я пытаюсь использовать RabbitMQ в более нетрадиционном способе (хотя в данный момент я могу выбрать любую другую реализацию очереди сообщений, если это необходимо)управление замком на masssage в кроличьих квадратных метрах

мое приложение работает как это, я есть одна очередь (у меня может быть больше, если необходимо), которые клиенты-клиенты получают N сообщений асинхронными. После того, как они выполняют свою работу, я отправляю результаты от клиента в db.

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

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

Кроме того, я посмотрел на вариант подтверждения, который на первый взгляд выглядел так, как я хотел, этот механизм работает следующим образом: когда потребитель получает сообщение, он отправляет подтверждение в очередь, я думал, что могу отложить это подтверждение и отправить его когда работа выполняется на стороне клиента. моя проблема заключалась в том, что я не могу запрограммировать очередь, что если какое-либо сообщение не получило подтверждения, верните его в очередь (или в другую).

Я также нахожу, как выполнять запланированное сообщение, но это не помогло ни потому, что я не хочу, чтобы сообщение было вставлено в очередь за пять минут, я хочу, чтобы когда клиент получит сообщение, будет заблокирован в очереди в течение 5 минут, пока не будет установлено подтверждение на удаление, иначе верните его в очередь.

Могу ли я сделать временную очередь, которая позволяет мой механизм?

Если кто-то может помочь с одной из проблем или предложить другую архитектуру или вариант сделать это в другом mq, было бы здорово.

Ресурсы:

подтверждение: http://www.rabbitmq.com/blog/2011/02/10/introducing-publisher-confirms/

сообщение о замках, но его проблема была Дозатор компонента: Locks and batch fetch messages with RabbitMq

TTL: https://www.rabbitmq.com/ttl.html

Расписание сообщение: https://www.rabbitmq.com/blog/2015/04/16/scheduling-messages-with-rabbitmq/

ответ

0

Проблема была в том, что я не могу запрограммировать очередь, что если какое-либо сообщение не получило подтверждения, верните его в очередь (или в другую).

RabbitMQ делает это так или иначе, так что все, что вам нужно сделать, это выключить флаг авто-Ack, вы поняли это

Я думал, что может задержать это подтвердить и отправить его, когда работа сделано на стороне клиента.

так просто отправьте ACK, как только закончите с обработкой сообщения. Все неподтвержденные сообщения остаются в очереди и повторно передаются следующему абоненту (или тому же, когда он снова вставлен, в зависимости от вашей настройки)

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