2017-02-16 2 views
0

У меня есть приложение весны, которое работает в нескольких экземплярах на облачном уровне. Эти экземпляры совместно используют базу данных. Они имеют RabbitListener настроены следующим образом:RabbitMQ/Spring: Будет ли еще один эксклюзивный потребитель регистрировать себя, если нынешние эксклюзивные дерегистры?

@RabbitListener(queues = "${items.updated.queue}", exclusive = true) 

Очередь получает сообщение, если реимпорт товаров из определенного источника требуется.

Мне нужен только один экземпляр для импорта. Насколько я понимаю, это может быть достигнуто эксклюзивным флагом.

Теперь, что произойдет, если текущий exclusive consumer сработает? Будет ли другой текущий экземпляр регистрироваться как новый exclusive consumer? Или регистрация происходит только при запуске приложения?

ответ

0

Да, другому пользователю будет предоставлен доступ.

Потребители будут пытаться потреблять каждые recoveryInterval миллисекунд (по умолчанию 5000 - 5 секунд).

Вы можете изменить это, установив интервал или recoveryBackoff в контейнер слушателя.

Обратите внимание, что вы получите журнал WARN из контейнера о сбое и журнал INFO на фабрике соединений о том, что канал был закрыт из-за сбоя.

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

См. the documentation.

Если потребитель терпит неудачу, поскольку один из них, если его очереди используются исключительно, по умолчанию, а также публикует событие, выдается журнал WARN. Чтобы изменить это поведение ведения журнала, предоставьте пользователю ConditionalExceptionLogger в SimpleMessageListenerContainerexclusiveConsumerExceptionLogger. См. Также раздел «События закрытия журнала событий».

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