RabbitMQ客户端是否必须请求心跳超时,或者服务器是否默认为60?

RabbitMQ客户端是否必须请求心跳超时,或者服务器是否默认为60?,rabbitmq,heartbeat,Rabbitmq,Heartbeat,根据RabbitMQ文件: 心跳超时值定义对等方在什么时间段之后 RabbitMQ和 客户端库。此值由客户和供应商协商确定 连接时的RabbitMQ服务器。客户必须是 配置为请求心跳。在RabbitMQ 3.0及更高版本中, 默认情况下,代理将尝试协商心跳(尽管 客户仍然可以否决)。超时时间以秒为单位,并且 默认值为60(3.5.5版之前为580) () 我在解码“客户端必须配置为请求心跳”语句时遇到问题 这是否意味着如果客户端不请求心跳,心跳消息就不会被发送?如果是这样,服务器默认值的意义是什

根据RabbitMQ文件:

心跳超时值定义对等方在什么时间段之后 RabbitMQ和 客户端库。此值由客户和供应商协商确定 连接时的RabbitMQ服务器。客户必须是 配置为请求心跳。在RabbitMQ 3.0及更高版本中, 默认情况下,代理将尝试协商心跳(尽管 客户仍然可以否决)。超时时间以秒为单位,并且 默认值为60(3.5.5版之前为580)

()

我在解码“客户端必须配置为请求心跳”语句时遇到问题

这是否意味着如果客户端不请求心跳,心跳消息就不会被发送?如果是这样,服务器默认值的意义是什么

我查看了Java和C#客户端,它们的客户端默认值都是60秒。是否有不默认此设置的客户端?

来自文档:

请注意,如果RabbitMQ服务器具有非零心跳超时 已配置(这是从3.6.x开始的版本中的默认设置) 客户端只能降低值,但不能增加值

在任何情况下,服务器指定默认值都没有坏处。协商心跳时,服务器向客户端发送其首选项,并且可以将客户端配置为考虑服务器默认值


或者心跳是独立双向的吗?因此要非常清楚:如果服务器有默认值,而客户端没有发送心跳请求值,那么心跳不会发生?客户端必须发送一个值,这是协商阶段的一部分。但是,客户端可以在tune ok帧中发送零作为心跳值,以禁用心跳超时。据我所知,rabbitmq中没有其他超时机制,因此,如果您禁用心跳超时,则只有当操作系统发出TCP连接中断信号时(这可能永远不会发生),才能检测到连接中断。啊,好的,谢谢。您如何解释此javascript客户端的文档:例如,“如果您提供0作为heartbeat参数(或默认为0),则使用服务器值。这意味着您只能在服务器值也为0的情况下禁用heartbeat。有关详细信息,请参阅此处。”哦,抱歉,客户端实现中似乎有一个约定,为了禁用心跳超时,客户端和服务器都必须将其设置为零。这是js客户机中的一行,这与java客户机中的相同。应该注意的是,服务器需要这一行,因为它将耗尽资源,否则将无法跟踪断开的连接