使用 ActiveMQ Artemis 是否可以查明听众是否已停止收听某个主题?

With ActiveMQ Artemis is it possible to find out if a listener has stopped listening to a topic?

我正在使用 ActiveMQ Artemis 2.18.0 和一些 Spring 通过主题相互通信的引导客户端。 Spring 引导客户端将 JMS 用于所有 MQTT 操作。

我想知道是否有可能让拥有一个或多个订阅者的制作人查明某个订阅者是否正在积极收听。例如,有 3 个客户端 - SB1、SB2 和 SB3。 SB1 发布到 test/topic,SB2 和 SB3 订阅到 test/topic。如果 SB2 出于任何原因关闭,SB1 是否有可能意识到这一点?

我知道队列是实现此目的的方法,但我的项目更适合主题的使用,并且已经以这种方式设置并且运行良好。只有一个操作必须确定侦听器是否处于活动状态,以便更新侦听器的 online status,这是一个关键参数。现在,客户端和服务器不断轮询数据库,以便 online status 定期更新,我想避免这样做,而是使用 Artemis 可能提供的东西。

Apache ActiveMQ Artemis 发出通知以通知侦听器在消费者创建或关闭时可能感兴趣的事件,请参阅 http://activemq.apache.org/components/artemis/documentation/latest/management.html 处的管理通知。

管理通知地址的侦听器将收到每个创建或关闭的消费者的消息,请参阅 http://activemq.apache.org/components/artemis/documentation/latest/examples.html#management-notification

处的管理通知示例

基于 pub/sub 的消息传递的部分要点是将信息生产者(发布者)与消费者(订阅者)分离。通常,发布者真的不应该关心是否有任何订阅者。

如果您想知道订阅者的状态,则由订阅者而不是发布者来更新。像 Last Will & Testament 功能这样的东西允许订户在离线时明确更新失败的情况下更新它的状态。