这里有几个问题,关于兔子心跳,但我还没有找到一个解决方法,如何实际更改60 seconds
的默认心跳值(以前版本中的580 seconds
(。
在消费者运行时间长于60 seconds
的情况下,并且无法产生任何可以算作心跳的流量(例如,PHP消费者(,考虑到消费者已经死亡,RabbitMQ将关闭连接,但消费者可能会继续继续运行,当它试图产生ACK时,连接已关闭,您会收到一条错误消息:
折断的管道或封闭连接
一个人可以将心跳在消费者端设置为较高的值,例如1800 seconds
,但是如果不更改代理配置,则将使用较低的值,如果默认值为默认值,则使用60 seconds
。来自RabbitMQ文档:
默认情况下,经纪人和客户将尝试协商心跳。 当两个值均为non-0时,请求的值的较低将为 用过的。如果一侧使用零值(试图禁用心跳( 但另一个不使用,将使用非零值。
要更改心跳值,可以在/etc/rabbitmq/rabbitmq.conf
中添加以下行(使用新配置格式(
heartbeat = 1800
这需要重新启动,所以问题是:如何在不重新启动的情况下更改RabbitMQ心跳值?
我正在回答自己的问题,因为我花了一些时间找到了如何做到这一点,因此有关如何使用eval
的文档并不是很有帮助。
可以使用 eval 更改RabbitMQ配置值:
评估任意的Erlang表达式。
然后可以使用rabbitmqctl eval
更改心跳值而无需重新启动:
# Set
rabbitmqctl eval 'application:set_env(rabbit, heartbeat, 1800).'
# Get
rabbitmqctl eval 'application:get_env(rabbit, heartbeat).'