Java JMS,检测临时队列何时被破坏

Java JMS,检测临时队列何时被破坏,java,jms,Java,Jms,我有一个“服务器”应用程序从JMS队列接收消息。客户端应用程序创建临时队列,然后向服务器发送消息,将JMSReplyTo头设置为临时队列 服务器使用临时队列回复客户机。但是,服务器有很多回复返回到客户端,这些回复都是通过临时队列发送的,并且持续了很长一段时间。(这些回复是特定于该客户端的,其他任何人都不感兴趣) 我的服务器如何检测客户端是否已断开连接?这样我就可以停止通过特定的临时队列发送消息了?或者我是在尝试使用JMS做我不应该做的事情吗?好吧,发布到该队列应该失败,因为一旦客户机消失,它就不

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

服务器使用临时队列回复客户机。但是,服务器有很多回复返回到客户端,这些回复都是通过临时队列发送的,并且持续了很长一段时间。(这些回复是特定于该客户端的,其他任何人都不感兴趣)


我的服务器如何检测客户端是否已断开连接?这样我就可以停止通过特定的临时队列发送消息了?或者我是在尝试使用JMS做我不应该做的事情吗?

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


因此,我不认为当客户端离开时需要通知,这是通过JMS无法做到的,因为尝试发送回复消息实际上会表明这一点。

使用activeMQ,您可以将临时队列强制转换为,然后询问目的地,例如

if (dest.getConsumers().size() < 1) {
  // No more consumers on this destination, so kill it.
}
if(dest.getConsumers().size()<1){
//在这个目的地没有更多的消费者,所以杀了它。
}

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

好的,进行一些初始测试(使用activemq)显示了服务器端在客户端终止后至少20秒保持无错误发送到临时队列可能是队列中未处理的消息使其保持活动状态吗?协作解决方案如何:客户端向服务器发送消息结束信号?这是一个次优解决方案,要求客户端永远不会崩溃,要求网络始终处于运行状态(否则消息结束消息可能永远不会发送)@noslasd-不知道该告诉你什么,因为我从未使用过它们。这里和其他地方的一些文档声称,使用寿命随着创建它的连接或会话而终止,队列的内容丢失。我假设发送新消息会失败,显然这是错误的,或者实现有缺陷。这似乎是activeMQ的.NET库的问题。使用Java和JMS库,当尝试发送到客户机不在的临时队列时,我确实会遇到一个异常:-不幸的是,到目的地的链接已断开。在ActiveMQ中,getConsumers()似乎不再可行。至少我无法作为ActiveMQQueue的成员找到它。似乎现在首选的方法是从代理查询活动目的地,例如。