Сервис RX не дождался закрытия канала RabbitMQ
«RabbitMQ channel is failed to close due to timeout» и «RabbitMQ operation timeout [CreateQueue]» в логах Directum RX: операции с брокером не укладываются в таймаут. Когда это фон, а когда признак того, что RabbitMQ перегружен.
Что это значит
Сервисы RX работают с RabbitMQ через каналы: открывают канал, создают очередь или забирают сообщение и закрывают канал. Если брокер не ответил на закрытие канала вовремя, сервис пишет RabbitMQ channel is failed to close due to timeout. и идёт дальше. Похожие записи RabbitMQ operation timeout. [CreateQueue...] и [CreateConsumer...] значат, что брокер не успел создать очередь или подписчика, а Cannot recreate consumer for '...' queue что сервис не смог заново подписаться на очередь после сбоя.
Единичные записи бывают при любом кратком подвисании брокера. Постоянный фон из тысяч таких записей в сутки значит, что RabbitMQ всё время отвечает медленно. Часть сервисов RX забирает сообщения опросом очереди, и при медленном брокере записи о каналах копятся быстро.
Как проверить
- Сколько каналов и соединений держит брокер и не растёт ли их число:
rabbitmqctl list_connections name channels | wc -l
rabbitmq-diagnostics observer # интерактивно: нагрузка по процессам Erlang
- Нагрузка на узлы брокера: процессор, диск, нет ли защиты по памяти или диску (
rabbitmq-diagnostics check_local_alarms). - Совпадение по времени с ошибками Error occurred while publishing и с перезапусками узлов.
Что сделать
- Если записи единичные и совпадают с перезапуском брокера или сервиса, считать их фоном.
- Если фон постоянный, разбирать производительность RabbitMQ: диски, число очередей, ресурсы узлов. Кворумные очереди пишут каждое сообщение на диск нескольких узлов, и медленный диск одного из них тормозит всю запись.
- После долгой недоступности брокера проверить, что сервисы RX действительно переподключились: если в журнале нет новых записей о подключении, сервис надо перезапустить.
Ошибка повторяется?
Запустите Диагностика: за полминуты он покажет состояние базы, брокера, поиска и сервера. С отчётом разберём причину за 30 минут бесплатного созвона.
Написать