RabbitMQ临时队列周期性死亡

RabbitMQ临时队列周期性死亡,rabbitmq,easynetq,Rabbitmq,Easynetq,我使用RabbitMQ将长时间运行的进程状态更改传递给Web服务器。应用服务器将事件发布到的队列中,Web服务器将使用这些事件 队列是临时的(x-expires:300000,auto-delete:true),在Web应用程序首次启动时启动 我面临的问题是,队列周期性地消失。我发现一个问题与RequestedHeartbeat设置有关。因为我们在web服务器上也有一些长时间运行的任务,所以队列周期性地死亡。在我增加了它的价值后,web上的长时间运行任务工作得很好 但是,队列仍然周期性地死亡。R

我使用RabbitMQ将长时间运行的进程状态更改传递给Web服务器。应用服务器将事件发布到的队列中,Web服务器将使用这些事件

队列是临时的(x-expires:300000,auto-delete:true),在Web应用程序首次启动时启动

我面临的问题是,队列周期性地消失。我发现一个问题与RequestedHeartbeat设置有关。因为我们在web服务器上也有一些长时间运行的任务,所以队列周期性地死亡。在我增加了它的价值后,web上的长时间运行任务工作得很好

但是,队列仍然周期性地死亡。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 '/'
2020-04-30 01:16:15.218[错误]连接上的通道错误(10.10.122.111:25734->10.10.234.111:5672,vhost:“/”,用户:“someuser”),
通道5:操作basic.consume导致未找到通道异常:vhost'/'中没有队列'QueueNo132321011360'
而且, 1) 如何检测临时队列已死亡


2) 从Web服务器更新临时队列的最佳机制是什么

If建议保留x-expires,但将auto-delete更改为false,这样您的队列就可以在客户端临时断开连接后生存(当然,除非您不在乎丢失消息)。

RabbitMQ队列永远不会被删除,即使您设置了
auto-delete:true
,只要有消费者。只有在不再有消费者时,队列才会自动删除。因此,请检查您的消费者是否在某个点停止从该队列消费,或在某个点以某种方式断开与Rabbit服务器的连接。@b先生,谢谢您的回复。消费者是一个Web服务器,我们使用EasyNetQ连接到Rabbitmq。我不知道你为什么要自动删除队列,但为什么不让队列持久?谢谢,这实际上是一个很好的观点。我不确定其他人开发它的确切原因是什么,但会考虑这个选项。。