Java 发布/订阅范例:我能知道订阅者是否还活着吗?

Java 发布/订阅范例:我能知道订阅者是否还活着吗?,java,jms,messaging,activemq,Java,Jms,Messaging,Activemq,我在主题发布者和数量可变的主题订阅者之间使用JMS(ActiveMQ) 我必须检查在给定的时间点,是否有一些订阅者处于“脱机”状态(断开连接、关机、无法通信等…。 JMS是否有一种方式允许发布者知道哪些订阅者已“注册” 现在,我已经实现了它,以便订阅者在特定队列上发送一条“活动”消息(作为生产者),发布者接收它们(作为消费者):如果检测到任何订阅者在X秒(阈值)内没有“ping”,则假定它处于脱机状态。 这是可行的,但我很想知道我是否重新发明了轮子 我知道这项功能与消息传递或发布/订阅范例并不完

我在主题发布者和数量可变的主题订阅者之间使用JMS(ActiveMQ)

我必须检查在给定的时间点,是否有一些订阅者处于“脱机”状态(断开连接、关机、无法通信等…。
JMS是否有一种方式允许发布者知道哪些订阅者已“注册”

现在,我已经实现了它,以便订阅者在特定队列上发送一条“活动”消息(作为生产者),发布者接收它们(作为消费者):如果检测到任何订阅者在X秒(阈值)内没有“ping”,则假定它处于脱机状态。 这是可行的,但我很想知道我是否重新发明了轮子

我知道这项功能与消息传递或发布/订阅范例并不完全相关,我也知道发布/订阅是专门设计的,这样发布者就不必担心其消息将被谁/在哪里/何时使用……但我想知道,如果它真的想知道,也许有办法。 毕竟,这似乎不是一个特别不寻常的用例


非常感谢。

我认为没有办法直接告诉您的出版商有关订阅者的信息


您应该做的是实际使用它来跟踪订阅者的状态。阅读这篇文章-它提供了你需要的所有信息。

我认为没有办法直接告诉你的出版商关于订阅者的信息


您应该做的是实际使用它来跟踪订阅者的状态。阅读本文-它提供了您需要的所有信息。

JMS明确地将发布者与订阅者分离。整个要点应该是,两人不需要知道或关心对方的状态。因此,JMS没有满足您需要的功能。另一方面,提供程序将具有特定于供应商的管理API,正如Paul所指出的,AMQ咨询消息是您想要的活动MQ。因为这些都是特定于供应商的,所以它不会移植到任何其他提供商,也不会兼容JMS。这不是AMQ的错,只是它不是JMS规范的一部分。

JMS明确地将发布者与订阅者分离。整个要点应该是,两人不需要知道或关心对方的状态。因此,JMS没有满足您需要的功能。另一方面,提供程序将具有特定于供应商的管理API,正如Paul所指出的,AMQ咨询消息是您想要的活动MQ。因为这些都是特定于供应商的,所以它不会移植到任何其他提供商,也不会兼容JMS。不是AMQ的错,只是它不是JMS规范的一部分。

可能使用此线程@Alfabravo中所示的持久订阅该线程中所示的解决方案特定于HornetQ。另外,DurableSubscriptions并不是我想要检查的内容,是吗??他们所做的只是将消息保存在内存中,以便将其发送给“不可检查”的订阅者……这不会向我的程序公开订阅者列表。不,该设置不绑定到HornetQ。aa好吧,如果有足够的解决方法,它可能会帮助您使用持久订阅,如@Alfabravo这个线程中所示。该线程中所示的解决方案是针对HornetQ的。另外,DurableSubscriptions并不是我想要检查的内容,是吗??他们所做的只是将消息保存在内存中,以便将其发送给“不可检查”的订阅者……这不会向我的程序公开订阅者列表。不,该设置不绑定到HornetQ。A好吧,也许有足够的解决办法,它可能会帮助你