我使用的是ActiveMQ Artemis 2.18.0和一些通过主题相互通信的Spring Boot客户端。Spring Boot客户端将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-通知
基于pub/sub的消息传递的一部分要点是将信息生产者(发布者(与消费者(订阅者(解耦。作为一个规则,一个发布的REALLY不应该关心是否有任何订阅者。
如果您想知道订阅服务器的状态,则由订阅服务器更新,而不是由发布服务器更新。像《最后的遗嘱》;遗嘱功能允许订阅者在离线时无法明确更新状态。