2016-08-29 2 views
0

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

Затем мы установили SimpleMessageListenerContainer и установили там имя очереди, а затем запустили его.

Однако время от времени очередь удаляется - в результате получается «404 не может объявить очередь XXXXXXXXX». В этих случаях мне нужно снова вызвать веб-сервис и добавить новое QueueName в SimpleMessageListenerContainer, а затем удалить старый.

Единственный способ, которым я вычислил, запускать любой код для обработки, это создать пользовательский CachedConnectionFactory и переопределить метод shutdownCompleted.

Однако shutdownCompleted, похоже, срабатывает, когда SimpleMessageListenerContainer также переключается, поэтому он вставляется в цикл. Исключение ShutdownSignalException, отправленное в shutdownCompleted, похоже, не выглядит каким-либо другим, если триггер является внешним от сервера или от клиента, обрабатывающего новую очередь, поэтому я не могу понять, как пропустить обработку на «втором» ходу.

Итак, каков обычный способ обнаружения и запуска пользовательской обработки, когда сервер убивает очередь?

ответ

0

Контейнер публикует ListenerContainerConsumerFailedEvent, когда слушатель терпит неудачу.

Добавить ApplicationListener<ListenerContainerConsumerFailedEvent>, остановить контейнер, сменить очереди и перезагрузить.

Вероятно, вы получите несколько событий, потому что по умолчанию контейнер попытается повторно подключиться 3 раза, прежде чем сдаться и остановиться.

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