rabbitmq - RabbitMQ 中心跳的合理值是多少?

标签 rabbitmq

RabbitMQ 允许您“检测”连接,即客户端和服务器不时检查(使用空消息)对方是否仍然存在且可用。到目前为止,一切顺利。

不幸的是,我无法在文档中找到提出合理值的建议的位置。我知道您需要以秒为单位指定心跳,但是现实世界的最佳实践值是多少?

显然,它不应该太频繁(流量),但也不应该太罕见(代理,...)。有什么建议吗?

15秒可以吗? 30? 60? ...?

最佳答案

此答案适用于 RabbitMQ < 3.5.5,对于较新的版本,请参阅 @bmaupin 的答案。

这取决于您的应用程序需求。 RabbitMQ 开箱即用 10 分钟。如果两次未能确认心跳(20分钟不活动),连接将立即关闭,不会发送任何connection.close方法或来自代理端的任何错误。

使用心跳的情况是防火墙关闭了长时间不活动的连接或某些其他不允许您有等待连接的网络设置。

其实hearbeat并不是必须的,来自RabbitMQ config doc

heartbeat

Value representing the heartbeat delay, in seconds, that the server sends in the connection.tune frame. If set to 0, heartbeats are disabled. Clients might not follow the server suggestion, see the AMQP reference for more details. Disabling heartbeats might improve performance in situations with a great number of connections, but might lead to connections dropping in the presence of network devices that close inactive connections. Default: 580

请注意,检测信号间隔太短可能会导致显着的网络开销。请记住,当在监听信号时间间隔内连接上没有其他事件时,将发送监听信号帧。

关于rabbitmq - RabbitMQ 中心跳的合理值是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25984602/

相关文章:

php - 如何延迟? - php-amqplib

python - Django Celery 目录结构和布局

rabbitmq - 服务器定义的交换与用户定义的交换

c# - 使用 Rebus 时是否有一种干净的方法来获取消息(传输)ID?

php - RabbitMq:替换重复的消息

java - 使用 Spring Cloud Stream 3.0+ 从 RabbitMQ 队列消费消息

java - 使用 RabbitMQ 远程调用 Java 应用程序

rabbitmq - Celery RabbitMQ 代理故障转移连接问题

java - 如何用java编写接送服务函数

rabbitmq - 在 RabbitMQ 中发布消息时发送 MessageProperties [priority=anyInteger]