如何在不重启的情况下更改 RabbitMQ 心跳
How to change RabbitMQ Heartbeat without restart
这里有几个关于 RabbitMQ 心跳的问题,但我还没有找到一个解决如何实际更改 60 seconds
(以前版本中的 580 seconds
)的默认心跳值的问题。
如果消费者 运行ning 的时间超过 60 seconds
并且无法产生任何可以算作心跳的流量(例如 PHP consumers),RabbitMQ 将考虑到消费者已死,关闭连接,但消费者可能会继续 运行,当它尝试生成 ACK 时,连接将关闭,您会收到如下错误消息:
Broken pipe or closed connection
consumer端的heartbeat可以设置大一点,比如1800 seconds
,但是如果broker的配置没有改变,那么会使用小一点的值,如果是默认值然后 60 seconds
。来自 RabbitMQ 文档:
The broker and client will attempt to negotiate heartbeats by default.
When both values are non-0, the lower of the requested values will be
used. If one side uses a zero value (attempts to disable heartbeats)
but the other does not, the non-zero value will be used.
要更改心跳值,可以在 /etc/rabbitmq/rabbitmq.conf
中添加以下行(使用 new configuration format)
heartbeat = 1800
这个需要重启,所以问题是:如何在不重启的情况下更改rabbitmq心跳值?
我正在回答我自己的问题,因为我花了一些时间才找到如何做到这一点,documentation on how to use eval
不是很有帮助。
可以使用 eval 更改 RabbitMQ 配置值:
Evaluate an arbitrary Erlang expression.
然后使用 rabbitmqctl eval
可以在不重新启动的情况下更改心跳值,如下所示:
# Set
rabbitmqctl eval 'application:set_env(rabbit, heartbeat, 1800).'
# Get
rabbitmqctl eval 'application:get_env(rabbit, heartbeat).'
这里有几个关于 RabbitMQ 心跳的问题,但我还没有找到一个解决如何实际更改 60 seconds
(以前版本中的 580 seconds
)的默认心跳值的问题。
如果消费者 运行ning 的时间超过 60 seconds
并且无法产生任何可以算作心跳的流量(例如 PHP consumers),RabbitMQ 将考虑到消费者已死,关闭连接,但消费者可能会继续 运行,当它尝试生成 ACK 时,连接将关闭,您会收到如下错误消息:
Broken pipe or closed connection
consumer端的heartbeat可以设置大一点,比如1800 seconds
,但是如果broker的配置没有改变,那么会使用小一点的值,如果是默认值然后 60 seconds
。来自 RabbitMQ 文档:
The broker and client will attempt to negotiate heartbeats by default. When both values are non-0, the lower of the requested values will be used. If one side uses a zero value (attempts to disable heartbeats) but the other does not, the non-zero value will be used.
要更改心跳值,可以在 /etc/rabbitmq/rabbitmq.conf
中添加以下行(使用 new configuration format)
heartbeat = 1800
这个需要重启,所以问题是:如何在不重启的情况下更改rabbitmq心跳值?
我正在回答我自己的问题,因为我花了一些时间才找到如何做到这一点,documentation on how to use eval
不是很有帮助。
可以使用 eval 更改 RabbitMQ 配置值:
Evaluate an arbitrary Erlang expression.
然后使用 rabbitmqctl eval
可以在不重新启动的情况下更改心跳值,如下所示:
# Set
rabbitmqctl eval 'application:set_env(rabbit, heartbeat, 1800).'
# Get
rabbitmqctl eval 'application:get_env(rabbit, heartbeat).'