成功部署分布式集群后,发现两个节点会发生消息重复的问题,后根据官方文档中的共享订阅更改了下配置,发现并未生效,仍旧消息会重复,是否还需其他配置?
请问具体情况是怎样的,能否在两个节点上打开 debug 日志查看一下消息的收发流程?
你是根据哪个文档修改了什么配置?
可以
从日志里没有看到重复消息的情况,但有一个 message drop 的 warning 日志,是因为订阅者 MQTT 会话里的消息队列满了所以丢弃了。
队列满一般是因为使用了持久的会话(clean session = false),并且客户端没有上线来消费。
还有一个错误是发送到 /uav/…/publish 这个主题没有权限(authorization),你可以检查一下你鉴权功能的配置。
日志里所指的 PUBLISH 消息内容的确一样,但它们是由两个不同的客户端(同时)发送到不同的节点上的。
我现在有一个问题,现在我已经有一个emqx 集群了,我当前是生产者,多个用户订阅了我,两个emqx节点所在的服务器分别部署了相同的业务处理系统,业务处理系统关联本地的emqx,确实出现了重复消费的情况,我的业务系统是关联emqx的集群ip还是节点的本地ip?
微信沟通之后的更新:
现在你那里有两个问题。
-
之前我看你日志的时候,发现他们给你每一个节点都发了一个相同的消息,也就是说他们本身就重复了,起码那你贴日志的那一次是重复了。
-
你不应该在每一个节点上都去订阅,如果你真的想这么做的话只能用共享订阅。我建议你使用 webhook 来实现你的消息获取业务,避免消费能力不足带来的麻烦。你的 HTTP 服务只需要一个,emqx 每个哪个节点收到消息就由哪个节点给你的 HTTP 服务推送。
https://www.emqx.io/docs/zh/v5.2/data-integration/webhook.html#webhook