如何在mosquitto MQTT中处理具有相同ID的多个客户端?

ros*_*ori 1 mqtt mosquitto

如果多个持久订阅者尝试使用相同的客户端 ID 进行连接,我如何告诉 mosquitto MQTT 该怎么做?

在错误配置订阅同一个代理的不同测试环境时,我不小心遇到了这种情况。结果是,两个订阅者都只收到了部分消息,并且 mosquitto 日志中充斥着“来自 xxx 的新连接”消息的垃圾邮件。优选地,第二订户将被拒绝以立即使这种错误显而易见。

为 Solace找到了一个类似的问题,它似乎提供了用新订阅者替换旧订阅者或拒绝新订阅者的选项。

但是,在检查mosquitto.conf的可用选项时,我看不到类似的选项。

har*_*llb 6

你没有。

MQTT 规范说客户端 ID 必须是唯一的,正确的行为是删除最旧的 ID 并用新的 ID 替换它。

  • 请参见 3.1.4“CONNECT 操作”-“如果 ClientID 表示客户端已连接到服务器,则服务器会向现有客户端发送 DISCONNECT 数据包,原因代码为 0x8E(会话被接管),如第 4.13 节中所述,并且必须关闭现有客户端的网络连接 [MQTT-3.1.4-3]。如果现有客户端有遗嘱消息,则该遗嘱消息将按照第 3.1.2.5 节中的描述发布。 (3认同)