Как «проверить» перед снятием очереди с Amqp / RabbitMQ (Spring AMQP) - PullRequest
0 голосов
/ 22 марта 2019

Сценарий: микросервис получает сообщение из очереди RabbitMQ, он преобразуется в объект, а затем микросервис выполняет вызов REST для внешней службы.

Он собирается обработать тысячи и тысячи такихсообщения, есть ли способ сказать моему потребителю не забирать сообщение из очереди, если мы знаем, что внешняя служба Rest не работает?

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

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

Extraинформация: приложение SpringBoot, отправляющееся в RabbitMQ с использованием Spring amqp.

Заранее спасибо

1 Ответ

1 голос
/ 22 марта 2019

Вы можете остановить и запустить контейнер прослушивателя сообщений.

Если вы используете отдельные контейнеры, вы можете остановить / запустить контейнерный компонент.

Если вы используете @RabbitListener, предоставьте атрибут id и провод в bean-компоненте RabbitListenerEndpointRegistry.

Тогда registry.getMessageListenerContainer(myId).stop();.

...