我在Topic Publisher和可变数量的Topic Subscribers之间使用JMS(ActiveMQ)。
我必须检查在某个特定时刻,某些订户是否“离线”(断开连接,关机,无法通信等)。
JMS是否允许发布者知道哪些订阅者已“注册”?
现在,我实现了它,以便订阅者在特定队列(充当生产者)上发送“活”消息,并且发布者接收它们(充当消费者):如果检测到任何订阅者没有't“ping”X秒(阈值),假设它处于离线状态。 它有效,但我很想知道我是否重新发明了轮子......
我知道这个功能与Messaging或Pub / Sub范例并不完全相关,我也知道Pub / Sub是专门设计的,因此发布者不必担心其消息将在何时/何地/何时消耗....但我想知道,如果它想知道,也许有办法。 毕竟,它似乎并不是一个特别罕见的用例....
非常感谢。
答案 0 :(得分:3)
我认为没有办法直接告诉您的发布商有关订阅者的信息。
您应该做的是实际使用AMQ advisory messages来跟踪订阅者的状态。阅读文章 - 它提供了您需要的所有信息。
答案 1 :(得分:1)
JMS明确地将发布者与订阅者分离。整点应该是两个人不需要知道或关心对方的状态。因此, JMS 无法满足您的需求。另一方面,提供商将拥有特定于供应商的管理API,正如Paul所说,AMQ咨询消息是您想要的Active MQ。因为这些是特定于供应商的,所以它不会移植到任何其他提供商,但不会符合JMS。不是AMQ的错,只是它不是JMS规范的一部分。