我有一个“服务器”应用程序从 JMS 队列接收消息。客户端应用程序创建一个临时队列,然后向服务器发送消息,将 JMSReplyTo 标头设置到临时队列。
服务器使用临时队列回复客户端。然而,服务器有很多回复给客户端,所有这些回复都通过临时队列发送了很长一段时间。(回复特定于该客户端,其他任何人都不感兴趣)
我的服务器如何检测客户端是否断开连接,以便我可以停止通过该特定临时队列发送消息?还是我试图用 JMS 做我不应该做的事情?
使用 activeMQ,您可以将临时队列投射到目的地,然后询问目的地,例如
if (dest.getConsumers().size() < 1) {
// No more consumers on this destination, so kill it.
}
或者从目的地,获取DestinationStatistics
,然后从 获取队列深度getMessages()
,如果大于n
则杀死 tempQ。
好吧,发布到该队列应该会失败,因为一旦客户离开,它就不应该再存在了。临时队列应该只在创建它的会话存在时才存在。
因此,我认为不需要在客户端离开时通知您,而您无法通过 JMS 进行通知,因为尝试发送回复消息实际上会表明这一点。