Как изящно прекратить потребление сообщений с @RabbitListener - PullRequest
1 голос
/ 05 мая 2019

Есть ли способ изящно остановить ListenerContainer и связанные с ним Consumers.

Чего я пытаюсь достичь.

  1. Прекратить потребление сообщений.
  2. Изящно остановиться ListenerContainer.
  3. Ожидание долго работающих потребителей и подтверждение после завершения.

Я могу остановить ListenerContainers, используя consumer.stop(), но активные долгосрочные потребители не будут успешно завершены, и обработанные сообщения не будут подтверждены и, следовательно, будут обработаны снова, как только ListenerContainer будет возобновлен .

выход

Waiting for workers to finish.
Workers not finished.
Closing channel for unresponsive consumer: Consumer@6d229b1c

Сообщение было обработано, но не подтверждено.

Возможно, мне удастся добиться постепенного отключения с помощью setForceCloseChannel(false), но можно ли проверить, закончили ли отмененные потребители? SimpleMessageListenerContainer.doShutDown () имеет локальный список с ограниченным доступом «cancelledConsumers».

1 Ответ

2 голосов
/ 05 мая 2019

Увеличение времени ожидания отключения.

См. Конфигурация контейнера приемника сообщений .

shutdownTimeout

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

/**
 * The time to wait for workers in milliseconds after the container is stopped. If any
 * workers are active when the shutdown signal comes they will be allowed to finish
 * processing as long as they can finish within this timeout. Defaults
 * to 5 seconds.
 * @param shutdownTimeout the shutdown timeout to set
 */
public void setShutdownTimeout(long shutdownTimeout) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...