У кворумной очереди нет работающего процесса на узле
«operation basic.consume caused a connection exception internal_error: failed consuming from quorum queue '...' in vhost '...': noproc» в RabbitMQ: подписаться на кворумную очередь не удалось, потому что её процесс на узле не работает. Как проверить состояние очереди и восстановить кворум.
Что это значит
Кворумная очередь хранится на нескольких узлах кластера RabbitMQ и работает, пока доступно большинство её копий и среди них выбран лидер. noproc значит, что процесса очереди на нужном узле нет: узел перезапускался, копия очереди не поднялась или очередь потеряла большинство. Брокер закрывает при этом не канал, а всё соединение клиента (connection exception), поэтому страдают и другие операции этого клиента.
Клиент должен переподключиться. Если клиентская библиотека не смогла восстановиться автоматически, сервис остаётся без соединения до перезапуска.
Как проверить
rabbitmq-queues quorum_status <очередь> --vhost <vhost>
rabbitmqctl cluster_status
rabbitmq-diagnostics check_if_node_is_quorum_critical
Первая команда покажет копии очереди, их состояние и лидера. Если большинства копий нет, очередь недоступна.
Что сделать
- Вернуть в кластер недостающие узлы: копии очереди догонят лидера сами.
- Если узел потерян навсегда, убрать его копии и добавить на живые узлы:
rabbitmq-queues shrink <узел>иrabbitmq-queues grow <узел> all. - Проверить, что сервисы-клиенты переподключились. Если в их журналах нет новых подключений, перезапустить их.
- Перезапускать узлы кластера по одному и дожидаться синхронизации очередей перед следующим.
Ошибка повторяется?
Запустите Диагностика: за полминуты он покажет состояние базы, брокера, поиска и сервера. С отчётом разберём причину за 30 минут бесплатного созвона.
Написать