目前我有一个MQTT系统,其中一个客户端发布,一个订阅。现在我想要一个许多客户发布的系统。怀疑者必须了解哪个客户端正在发送信息。
虽然一个明显的方法是简单地在发布消息中附加客户端ID,但我想知道是否有一种获取客户端ID的方法,而无需将其明确添加到消息中。
详细说明,假设主题是" / hello / world",并且客户端1发布" OK",客户端2发布" ERR"。有没有办法确定哪个客户端发送了什么消息?
答案 0 :(得分:11)
我不相信你可以告诉谁在没有看日志的情况下发送了消息。
我过去克服这个问题的方法是在主题中发布带有客户端ID的消息; (client_id可以在主题的任何位置)
/hello/clientid1/world ok
/hello/clientid2/world err
/hello/clientid3/world warning
然后订阅这样的主题;
/hello/+/world
然后在您的代码中转换主题名称以获取消息和客户端ID。
我使用的另一种方法是在有效载荷中使用json,例如
/hello/world {"msg":"err", "client":"clientid1"}
答案 1 :(得分:11)
如果没有将客户端的名称放在主题中,或者在邮件正文本身中,则无法执行此操作。这是一个简单的发布和订阅系统,原则是发布者和订阅者不需要彼此了解 - 事实上,发布者不应该假设有任何订阅者,这是完全可能的情况。
因此,如果您确实需要这样做,则需要以某种方式将客户端ID放在主题名称中,或将其包含在已发布消息数据的正文中。