如何在不重新开始的情况下改变兔子心跳



这里有几个问题,关于兔子心跳,但我还没有找到一个解决方法,如何实际更改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).'

最新更新