0

我有一个“服务器”应用程序从 JMS 队列接收消息。客户端应用程序创建一个临时队列,然后向服务器发送消息,将 JMSReplyTo 标头设置到临时队列。

服务器使用临时队列回复客户端。然而,服务器有很多回复给客户端,所有这些回复都通过临时队列发送了很长一段时间。(回复特定于该客户端,其他任何人都不感兴趣)

我的服务器如何检测客户端是否断开连接,以便我可以停止通过该特定临时队列发送消息?还是我试图用 JMS 做我不应该做的事情?

4

2 回答 2

1

使用 activeMQ,您可以将临时队列投射到目的地,然后询问目的地,例如

if (dest.getConsumers().size() < 1) {
  // No more consumers on this destination, so kill it.
}

或者从目的地,获取DestinationStatistics,然后从 获取队列深度getMessages(),如果大于n则杀死 tempQ。

于 2009-07-08T21:21:43.240 回答
0

好吧,发布到该队列应该会失败,因为一旦客户离开,它就不应该再存在了。临时队列应该只在创建它的会话存在时才存在。

因此,我认为不需要在客户端离开时通知您,而您无法通过 JMS 进行通知,因为尝试发送回复消息实际上会表明这一点。

于 2009-07-08T17:13:22.277 回答