集群使用了共享订阅的情况下的一些问题

我的集群下有A、B两个节点

client1 连接了A节点,使用共享订阅了主题$queue/t/1

client2 连接了B节点,使用共享订阅了主题$queue/t/1

现在client3 连接了A节点,对主题t/1 发布了一个消息,请问有什么办法保证一定是连接同一个A节点下的client1 接收到这个消息吗?

当你的共享订阅有分类或者说分组的情况下,你可以使用 $share/组名 的方式,对订阅进行分组。$queue 因为是没有分组,所以没法实现你想要的效果

分组的情况我也有考虑到,如:
$share/a/t/1
$share/b/t/1

但是这样的话,一个消息,集群里面两个节点都可以收到,b节点收到的消息对于实际业务场景来说,也没有任何作用的,属于资源浪费,

后者 集群下2个节点,不需要共享订阅,有什么方法可以实现,某一些主题在让注册在同一个节点上的client可以收到消息,其他节点的client 就算也订阅了该主题,但是无法接收到

如果是消息不需要再集群间传递,那完全可以节点 A 的 发布和订阅都改为 A/t/1?

可以试试配置 shared subscription 的策略为 local,感觉就是你想要的效果。

mqtt.shared_subscription_strategy = local

  • local: select random local subscriber otherwise select random cluster-wide

非常感谢,要的就是这个