rabbitmq的consumer_timeout修改

问题:

项目中使用了rabbitmq来做异步任务,最近突然发现一个耗时比较长的任务一直在重复执行。

排查:

排查日志后发现了超时,channel关闭。如果超过了consumer_timeout时间默认为180000ms后会断开连接,如果是手动ack,会报错PublisherCallbackChannel is closed

分析:

官网有说在目前支持的所有RabbitMQ版本中,在消费者交付确认时强制执行超时。这有助于检测从不确认交付的有bug(卡住)的消费者。这样的消费者会影响节点在磁盘上的数据压缩,并可能导致节点耗尽磁盘空间。

 

 解决:

  既然是因为超时原因导致的,那么给超时时间加大就可以了。

 1.在etc目录下建一个文件,/etc/rabbitmq.conf,rabbitmq默认不会建这个文件,然后文件里面设置consumer_timeout = 720000(根据需要来决定)。然后重新启动rabbitmq。这种方式会使得rabbitmq短暂不可用不是太友好。

 2.直接动态修改,通过 rabbitmqctl eval 'application:set_env(rabbit,consumer_timeout,720000).'  修改。

3. 修改后通过rabbitmqctl eval 'application:get_env(rabbit,consumer_timeout).' 验证。

posted @ 2022-11-29 20:30  long阿斯巴甜  阅读(3338)  评论(0编辑  收藏  举报