Распакованные сообщения PCF RabbitMQ в очереди

#rabbitmq #spring-cloud-stream #spring-amqp #pcfdev

#rabbitmq #поток spring-cloud-stream #spring-amqp #pcfdev

Вопрос:

Я использую PCF для запуска моего приложения spring-boot. Также использовался сервис PCF RabbitMQ.

Моя проблема в том, что некоторое время сообщение в очереди долгое время оставалось нераспакованным, и я заметил, что количество запущенных экземпляров приложения в PCF меньше, чем количество активных каналов-потребителей в RabbitMQ.

RabbitMQ

PCF

У меня также включен автоскалер, который автоматически масштабирует экземпляр приложения вверх / вниз в зависимости от применяемого правила.

Мне не повезло воспроизвести проблему, поскольку в клиентском приложении нет журналов ошибок, и единственное решение, которое я сделал, — перезапустить приложение в PCF. Я также пытался принудительно завершить работу приложения, и, похоже, что канал потребителя также уничтожен.

Любая помощь или предложение, которое я могу посмотреть? Я использовал spring cloud stream для своего потребительского приложения и очень простую конфигурацию в файле yml (без dlq, без пользовательского тайм-аута и т.д.)

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

Ответ №1:

2.0.x больше не поддерживается; однако последняя версия 2.0.x — 2.0.14.

Если вы используете автоматическое восстановление в amqp-клиенте (не рекомендуется, поскольку Spring AMQP имеет свои собственные механизмы восстановления, предшествующие автоматическому восстановлению в клиенте), в 2.0.7 было включено исправление.

Вам следует, по крайней мере, обновиться до 2.0.14, но предпочтительно до более новой поддерживаемой версии; текущая версия 2.2.10.

Тем не менее, подавляющее большинство подобных проблем вызвано тем, что поток прослушивателя «застрял» в пользовательском коде; сделайте дамп потока в следующий раз, когда это произойдет.

Комментарии:

1. Спасибо за ответ, мы будем отслеживать наше приложение и в следующий раз получим дамп потока. Надеюсь что-нибудь найти. Также попытаемся обновить версию spring-amqp, которую мы используем.

Ответ №2:

У нас была похожая проблема, насколько я помню, нам пришлось установить automaticRecoveryEnabled в false на rabbit connection factory, поскольку произошел конфликт между этим и spring autorecovery.

Комментарии:

1. На фабрике rabbit connection в используемой нами версии для параметра automaticRecoveryEnabled по умолчанию установлено значение false.

2. Что-то нашел, есть артефакт (spring_auto_reconfiguration-2.XX.X_RELEASE.jar ) выполняется в PCF вместе с приложением spring boot, которое автоматически настраивает фабрику соединений и делает значение automaticRecoveryEnabled равным true.