Соединение RX с RabbitMQ закрылось
Ошибка «Already closed: The AMQP operation was interrupted» в Directum RX: брокер RabbitMQ или сеть закрыли канал. Когда сервисы переподключатся сами и когда задания перестают двигаться.
Что это значит
Сервисы Directum RX обмениваются сообщениями через RabbitMQ: асинхронные обработчики, фоновые процессы, индексация, уведомления. Ошибка означает, что канал или соединение с брокером уже закрыто, а сервис пытался им воспользоваться. В тексте после неё обычно видна причина: initiated by Peer (закрыл брокер), initiated by Library (закрыл сам клиент), код и пояснение.
Платформа переподключается сама. Если ошибки единичные, пользователи ничего не замечают.
Как проверить
- Причину в хвосте сообщения. Частые варианты:
-
PRECONDITION_FAILED - delivery acknowledgement … timed out: обработчик держал сообщение дольшеconsumer_timeout, брокер закрыл канал; -CONNECTION_FORCED: брокер перезапускали или соединение закрыл администратор; - разрыв без кода: сеть или межсетевой экран. - Состояние брокера:
rabbitmq-diagnostics status
rabbitmq-diagnostics alarms
- Не стоят ли очереди: растёт ли число сообщений и есть ли у очередей потребители.
Что сделать
- Единичные закрытия после перезапуска брокера: ничего.
- Регулярные
delivery acknowledgement timed out: какой-то обработчик работает дольше таймаута. Разбирать сам обработчик или увеличитьconsumer_timeoutдля этой нагрузки, см. статью о таймауте подтверждения. - Обрывы без причины: проверить таймауты простоя на сетевом оборудовании между сервисами и брокером.
- Если после ошибок очередь растёт и потребителей нет, сервис не переподключился. Помогает его перезапуск, а алерт на «очередь без потребителей» поймает это в следующий раз.
Ошибка повторяется?
Запустите Диагностика: за полминуты он покажет состояние базы, брокера, поиска и сервера. С отчётом разберём причину за 30 минут бесплатного созвона.
Написать