如何在不重新启动的情况下更改RabbitMQ心跳

时间:2019-07-04 11:16:12

标签: rabbitmq consumer heartbeat rabbitmqctl

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心跳值?

1 个答案:

答案 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).'