Управляющая блокировка на массаж в кролике

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

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

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

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

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

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

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

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

Ресурсы:

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

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

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

Запланируйте сообщение: https://www.rabbitmq.com/blog/2015/04/16/scheduling-messages-with-rabbitmq/

1 ответ

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

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

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

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

Другие вопросы по тегам