转到http://rmq.example.com:15672/#/connections会显示打开的连接及其属性。一个属性称为“超时”。对于使用RabbitMQ Java客户端建立的连接,此值设置为600.对于使用node-amqp
库建立的连接,它是空白的。
我无法弄清楚如何改变它或者甚至不知道它的作用。在Java库中,有一个带有ConnectionFactory
方法的setTimeout
,但这会将传递给Socket.connect
的超时设置为ms,即它是一个客户端超时,无法实现服务器(实际上它与RMQ页面上显示的600不一致)。我还尝试添加timeout
,connectionTimeout
和connection_timeout
作为客户端属性,但这些不会影响timeout
。实际上,它们分别显示在客户端属性中(通过REST API检查):
"client_properties":{"connectiontimeout":"40000",
"connectionTimeout":"30000",
"connection_timeout", ... }
我不知道数字“600s”是从客户端发送的,还是服务器默认的,甚至是它的作用。我正在查看Java库和node-amqp
的来源以支持一些证据,但是想问一下是否有人对此有更高层次的了解。
答案 0 :(得分:4)
这是心跳。明确同义词的唯一地方是man page for rabbitmqctl:
timeout
Connection timeout / negotiated heartbeat interval, in seconds.
在Java客户端中,这是通过ConnectionFactory.setRequestedHeartbeat(int seconds)
设置的。我已经读过,心跳是服务器知道连接何时死亡所必需的,但我不知道为什么会这样,因为AMQP是一个应用层协议,而不是传输层,并且传输层管理连接何时开始和结束。