Клиент проверил очередь, которой нет
«operation queue.declare caused a channel exception not_found: no queue '...' in vhost '...'» в журнале RabbitMQ: клиент проверил существование очереди, а её нет, и брокер закрыл канал. Когда это штатная проверка, а когда признак удалённых очередей.
Что это значит
Клиент может объявить очередь в пассивном режиме: не создать, а только проверить, что она существует. Если очереди нет, брокер отвечает ошибкой 404 NOT_FOUND и закрывает канал. В журнале RabbitMQ это выглядит как operation queue.declare caused a channel exception not_found, а перед ней строка Channel error on connection.
Приложения часто так проверяют временные очереди: ответные, очереди отдельных экземпляров сервиса. Если очередь удалилась сама (истёк срок жизни, ушёл последний подписчик), проверка и даёт эту ошибку, а клиент открывает новый канал и создаёт очередь заново.
Как проверить
- Имя очереди и виртуальный хост из текста: это постоянная очередь приложения или временная.
- Есть ли очередь сейчас:
rabbitmqctl list_queues -p <vhost> name | grep <имя>. - Не совпадает ли всплеск ошибок с перезапуском узлов брокера: после него исчезают очереди, которые не переживают перезапуск.
Что сделать
- Для временных очередей считать это фоном.
- Если пропала постоянная очередь, которая нужна приложению, разбираться, кто её удалил, и проверить, что приложение пересоздаёт её при старте.
- Не включать в тревоги каждую такую запись: тревожиться стоит о росте числа ошибок каналов в целом.
Ошибка повторяется?
Запустите Диагностика: за полминуты он покажет состояние базы, брокера, поиска и сервера. С отчётом разберём причину за 30 минут бесплатного созвона.
Написать