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