RabbitMQ中的服务器端超时是多少?

时间:2013-11-21 19:03:52

标签: java timeout rabbitmq

转到http://rmq.example.com:15672/#/connections会显示打开的连接及其属性。一个属性称为“超时”。对于使用RabbitMQ Java客户端建立的连接,此值设置为600.对于使用node-amqp库建立的连接,它是空白的。

我无法弄清楚如何改变它或者甚至不知道它的作用。在Java库中,有一个带有ConnectionFactory方法的setTimeout,但这会将传递给Socket.connect的超时设置为ms,即它是一个客户端超时,无法实现服务器(实际上它与RMQ页面上显示的600不一致)。我还尝试添加timeoutconnectionTimeoutconnection_timeout作为客户端属性,但这些不会影响timeout。实际上,它们分别显示在客户端属性中(通过REST API检查):

"client_properties":{"connectiontimeout":"40000",
"connectionTimeout":"30000",
"connection_timeout", ... }

我不知道数字“600s”是从客户端发送的,还是服务器默认的,甚至是它的作用。我正在查看Java库和node-amqp的来源以支持一些证据,但是想问一下是否有人对此有更高层次的了解。

1 个答案:

答案 0 :(得分:4)

这是心跳。明确同义词的唯一地方是man page for rabbitmqctl

timeout
    Connection timeout / negotiated heartbeat interval, in seconds.

在Java客户端中,这是通过ConnectionFactory.setRequestedHeartbeat(int seconds)设置的。我已经读过,心跳是服务器知道连接何时死亡所必需的,但我不知道为什么会这样,因为AMQP是一个应用层协议,而不是传输层,并且传输层管理连接何时开始和结束。