第一个订阅者读取 MQTT 消息后将其删除

Rai*_*lin 1 java jboss mqtt

有没有办法在第一个订阅者收到 MQTT 消息后从其主题中删除该消息,以便其他订阅者无法读取它?
为了弄清楚这个奇怪的问题:
我必须处理四个 JBoss 实例(我必须承认我绝对不对该架构负责)。他们是彼此的镜子。因此,它们中的每一个都运行一项订阅特定主题的作业。来自该主题的消息保留在数据库中。我必须避免的是同一条消息被保留四次。所以我的想法是在这个主题上创建一个竞争条件。第一个读取该消息的作业将其删除,以便其他作业不会收到该消息。这可能吗?

har*_*llb 5

排序答案 否,一旦发布消息,您就无法“删除”消息,经纪人将几乎立即发送给所有订阅者。

更长的答案,您正在寻找的是所谓的共享订阅。这允许一组客户端作为有效的单个单元订阅一个主题,并且消息仅传递到该组中的一个。这是为了负载平衡。共享订阅将作为 v5 的一部分添加到 MQTT 规范中。

目前,许多代理已经实现了此功能(每个代理的实现都略有不同,因此在 v5 之前您无法在代理实现之间无缝切换)作为增值功能。我相信以下经纪商有某些版本的共享订阅支持,可能还有更多:

  • HiveMQ
  • IBM Message Sight 设备
  • 韦尔内姆克