0

我在我们的 stomp.py 7.0 客户端(仅限侦听器)中看到了行为,在一段时间未接收消息的空闲时间之后,ActiveMQ 5.15.9 代理似乎放弃了客户端(即查看 ActiveMQ 管理控制台显示零消费者)。奇怪的是on_disconnected客户端的处理程序永远不会被调用,并且我们对检查连接的客户端服务进行了健康检查is_connected(),但它仍然返回 true。

根据我的理解/研究(如果有任何错误,请更正)这是由于经纪人试图清理它认为不活动的资源。同样根据我的研究,“心跳”可以用来避免对经纪人的这种看法。

我知道如何从客户端发送心跳标头以及如何检查来自服务器/代理的响应(就它所期望的而言),on_connected但我的问题是如何将实际的心跳从客户端发送到服务器/代理? 我需要在我正在收听的队列上发送消息吗?如果是这样,我如何发送“心跳消息”而不必调整侦听器中的消息处理代码?没有实体送吗?还需要将代理配置为接受心跳吗?如果未配置,则从客户端声明和发送它们仍会导致代理断开客户端连接?

4

1 回答 1

0

心跳是STOMP 1.2的一部分,因此只要您的客户端支持 STOMP 1.2,您就应该能够在建立连接时配置心跳。此外,如果您的代理支持 STOMP 1.2,它应该接受heart-beat标头并相应地调整其行为。您不必发送自己的心跳。在没有任何“正常”STOMP 帧的情况下,客户端本身应该按照规范中的描述发送 EOL。

如果您的客户端不支持 STOMP 1.2,那么您应该升级到支持的客户端。STOMP 1.2 规范于 2012 年 10 月发布,距今已近十年,因此有足够的时间来实施支持。

于 2022-02-18T19:54:05.113 回答