Что это значит

С версии 3.8.15 RabbitMQ следит, сколько потребитель держит сообщение без подтверждения. По умолчанию предел 30 минут (consumer_timeout). Если обработчик не уложился, брокер закрывает канал с ошибкой PRECONDITION_FAILED (код 406) и возвращает сообщение в очередь. Сервис RX переподключается, берёт сообщение снова, и если обработка опять долгая, история повторяется по кругу.

Для пользователя это выглядит как задание или операция, которая «висит» и не завершается.

Как проверить

  1. Текущий таймаут:
rabbitmqctl eval 'application:get_env(rabbit, consumer_timeout).'
  1. Какая очередь: имя видно в логе брокера рядом с ошибкой. По имени понятно, какой обработчик RX её читает.
  2. Сколько сообщений в работе без подтверждения:
rabbitmqctl list_queues name messages_ready messages_unacknowledged consumers

Что сделать

  1. Найти, почему обработчик идёт дольше получаса: тяжёлый запрос к базе, большой документ, ожидание внешней системы. Это фактура для разработчиков.
  2. Если долгая обработка ожидаема (массовая операция, конвертация), увеличить consumer_timeout в rabbitmq.conf, значение в миллисекундах:
consumer_timeout = 7200000
  1. Не отключать таймаут совсем: без него зависший обработчик держит сообщения бесконечно, и этого никто не видит.