SO中有一些关于RabbitMQ心跳的问题,但我还没有找到解决实际更改默认心跳值60 seconds
(先前版本为580 seconds
)的问题。
如果使用者的运行时间超过60 seconds
,并且无法产生任何可算作心跳的流量(例如PHP consumers),RabbitMQ会考虑到使用者处于关闭状态而关闭连接已死,但使用者可能会继续运行,并且当它尝试产生ACK时,连接已关闭,并且您收到以下错误消息:
管道破裂或封闭连接
可以将消费者端的心跳设置为较高的值,例如1800 seconds
,但是如果未更改代理配置,则将使用较低的值,如果使用默认值,则使用{ {1}}。来自RabbitMQ文档:
默认情况下,代理和客户端将尝试协商心跳。 当两个值都不为0时,较低的请求值将是 用过的。如果一侧使用零值(尝试禁用心跳) 但另一个不会,将使用非零值。
要更改心跳值,可以在60 seconds
中添加以下行(使用new configuration format)
/etc/rabbitmq/rabbitmq.conf
这需要重新启动,所以问题是:如何在不重新启动的情况下更改rabbitmq心跳值?
答案 0 :(得分:2)
我要回答自己的问题,因为花了一些时间来找到如何做的方法,documentation on how to use eval
并没有很大帮助。
可以使用 eval 来更改RabbitMQ配置值:
计算一个任意的Erlang表达式。
然后可以使用rabbitmqctl eval
来更改心跳值,而无需像这样重新启动:
# Set
rabbitmqctl eval 'application:set_env(rabbit, heartbeat, 1800).'
# Get
rabbitmqctl eval 'application:get_env(rabbit, heartbeat).'