【发布时间】:2018-01-30 18:58:16
【问题描述】:
RabbitMQ 允许您“检测”连接,即客户端和服务器不时检查(使用空消息)对方是否仍然存在并且可用。到目前为止,一切顺利。
不幸的是,我无法在文档中找到提出建议的位置,该建议的合理值是多少。我知道您需要以秒为单位指定心跳,但实际的最佳实践值是多少?
显然,它不应该太频繁(流量),但也不应该太罕见(代理,...)。有什么建议吗?
15 秒可以吗? 30? 60? ……?
【问题讨论】:
标签: rabbitmq
RabbitMQ 允许您“检测”连接,即客户端和服务器不时检查(使用空消息)对方是否仍然存在并且可用。到目前为止,一切顺利。
不幸的是,我无法在文档中找到提出建议的位置,该建议的合理值是多少。我知道您需要以秒为单位指定心跳,但实际的最佳实践值是多少?
显然,它不应该太频繁(流量),但也不应该太罕见(代理,...)。有什么建议吗?
15 秒可以吗? 30? 60? ……?
【问题讨论】:
标签: rabbitmq
此答案适用于 RabbitMQ
这取决于您的应用程序需求。 RabbitMQ 开箱即用是 10 分钟。如果您两次未能确认心跳(20 分钟不活动),连接将立即关闭,而不发送任何 connection.close 方法或来自代理端的任何错误。
使用心跳的情况是防火墙关闭长时间不活动的连接或其他一些不允许您等待连接的网络设置。
其实heartbeat不是必须的,来自RabbitMQ config doc
心跳
表示服务器在 connection.tune 帧中发送的心跳延迟的值,以秒为单位。如果设置为 0,则禁用心跳。客户端可能不遵循服务器建议,请参阅 AMQP 参考了解更多详细信息。在有大量连接的情况下,禁用心跳可能会提高性能,但可能会导致在关闭非活动连接的网络设备存在时连接断开。 默认值:580
请注意,心跳间隔太短可能会导致大量网络开销。请记住,当在检测信号时间间隔内连接上没有其他活动时,会发送检测信号帧。
【讨论】:
RabbitMQ 文档现在提供了 5 到 20 秒之间的推荐心跳超时值:
将心跳超时值设置得太低可能会导致误报(对等点被视为不可用,而实际上并非如此),这是由于短暂的网络拥塞、短暂的服务器流量控制等。选择超时值时应考虑到这一点。
来自用户和客户端库维护者的多年反馈表明,低于 5 秒的值很可能会导致误报,而 1 秒或更低的值很可能会导致误报。对于大多数环境来说,5 到 20 秒范围内的值是最佳的。
来源:https://www.rabbitmq.com/heartbeats.html#false-positives
此外,从 RabbitMQ 3.5.5 开始,默认的心跳超时值为 60 秒 (https://www.rabbitmq.com/heartbeats.html#heartbeats-timeout)
【讨论】: