共享订阅粘性订阅

环境

  • EMQX 版本:5.8.6
  • 操作系统版本:

重现此问题的步骤

  1. 共享订阅方式设置为sticky的local策略

  2. 6个订阅者分别连接三个broker,每个broker两个订阅者,订阅相同主题:$queue/a/+/b

  3. 发现以上6个订阅者中,有2个订阅者未订阅到数据。

预期行为

6个订阅者都订阅到数据

实际行为

有2个订阅者未订阅到数据

所以你真的理解了这句话不?

如果你无法理解,可以把文档复制给 AI,让他给你解释一下。
我觉得文档已经写得很好了。我不知道还能怎么解释给你听。

sticky就是固定的意思。初始 sticky 选了 local,就是在本节点随机选一个(当然就有概率没选到)我认为这个行为符合文档。

那可以解释下为什么第一个节点有两个订阅者都订阅到了消息。按照你的说法,不是应该只有一个订阅者能订阅到消息吗?

我试了下,没有重现你说的那种情况:
步骤如下:

  1. 2 个客户端订阅到 $queue/a/+/b
  2. 一个客户端定时发布 a/x/b (3s) a/y/b (3s)
  3. 全是命中的一个订阅者。别一个是没收到。

PS:改了 mqtt 配置后,你要用 clean start = true 启动客户端,或者重启一下 emqx。否则会出现客户端上线后,使用旧的 session (里面可能是修改前的 mqtt 配置)这样也可能会引起你上面的情况。