Временная очередь RabbitMQ периодически умирает

Я использую RabbitMQ для передачи долгосрочных изменений состояния процесса на веб-сервер. Сервер приложений будет публиковать события в очереди, а веб-сервер будет использовать эти события.

Очереди являются временными (x-expires: 300000, auto-delete: true) и инициируются при первом запуске веб-приложения.

Проблема, с которой я сталкиваюсь, заключается в том, что очередь периодически умирает. Я выяснил, что одна проблема связана с настройкой RequestedHeartbeat. Поскольку у нас также была какая-то длительная задача на веб-сервере, очередь периодически умирала. После того, как я увеличил его значение, длительная задача в Интернете работает нормально.

Однако очередь все равно периодически умирает. Rabbit MQ имеет постоянно увеличивающийся файл журнала со следующими ошибками. Некоторые из этих ошибок происходят из другой среды dev/staging/uat, но такие же ошибки

2020-04-30 01:16:15.218 [error] <0.3578.286> Channel error on connection <0.30037.285> (10.10.122.111:25734 -> 10.10.234.111:5672, vhost: '/', user: 'someuser'), 
channel 5: operation basic.consume caused a channel exception not_found: no queue 'QueueNo132321011360' in vhost '/'

Кроме того, 1) Как определить, что временная очередь умерла?

2) Каков наилучший механизм обновления временной очереди с веб-сервера?


person kapd    schedule 30.04.2020    source источник
comment
Очередь RabbitMQ никогда не удаляется, даже если вы установили auto-delete:true, пока есть потребитель. Очередь будет автоматически удалена только в том случае, если больше нет потребителей. Поэтому проверьте своего потребителя, если в какой-то момент он перестанет потреблять из этой очереди или в какой-то момент каким-то образом отключится от вашего сервера Rabbit.   -  person mr.b    schedule 30.04.2020
comment
@ mr.b Спасибо за ответ. Потребителем является веб-сервер, и мы используем EasyNetQ для подключения к Rabbitmq. Любые указатели, которые я могу проверить.   -  person kapd    schedule 30.04.2020
comment
Я не уверен, почему именно вы хотите автоматически удалять очередь, но почему бы не сделать очередь долговечной? rabbitmq.com/queues.html   -  person mr.b    schedule 30.04.2020
comment
Спасибо, это действительно хороший момент. Я не уверен, в чем именно была причина, поскольку кто-то другой разработал ее, но рассмотрю этот вариант.   -  person kapd    schedule 30.04.2020


Ответы (1)


Если бы рекомендовал сохранить x-expires, но изменить автоматическое удаление на false, чтобы ваши очереди выдерживали временные отключения клиентов (если, конечно, вы не заботитесь о потере сообщений).

person Wiebe Tijsma    schedule 30.04.2020