#rabbitmq #spring-cloud-stream #spring-amqp #pcfdev
#rabbitmq #поток spring-cloud-stream #spring-amqp #pcfdev
Вопрос:
Я использую PCF для запуска моего приложения spring-boot. Также использовался сервис PCF RabbitMQ.
Моя проблема в том, что некоторое время сообщение в очереди долгое время оставалось нераспакованным, и я заметил, что количество запущенных экземпляров приложения в PCF меньше, чем количество активных каналов-потребителей в RabbitMQ.
У меня также включен автоскалер, который автоматически масштабирует экземпляр приложения вверх / вниз в зависимости от применяемого правила.
Мне не повезло воспроизвести проблему, поскольку в клиентском приложении нет журналов ошибок, и единственное решение, которое я сделал, — перезапустить приложение в 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.