mqtt - mosquitto 可以转发消息发送者的 ClientID 吗?

标签 mqtt mosquitto paho

我正在使用mosquitto MQTT 代理。 此外,我有多个(当前有 10 个,但数量会增加)客户端定期向主题 A 发布一些传感器数据。这些客户端在技术上是相同的,但具有唯一的标识符(序列号)。

我还有一个订阅主题 A 的客户端,以便接收已发布的消息并将传感器值保留在数据库中。 我当然需要知道哪个传感器(即客户端)发送了特定值。

作为一种解决方案,人们可​​以将一些传感器 ID 附加到每条已发布消息的有效负载中。但由于传感器通过 GSM 访问代理,我需要保持低流量,所以我试图避免这种情况。

我假设,代理本身知道哪条消息来自哪个客户端,特别是在使用持久连接时,即clean_session=False。那是对的吗? 如果是,订阅客户端在接收消息时是否有机会获取client_id? 可以在mosquitto中配置吗?或者这是默认行为而我遗漏了一些东西?

我正在使用paho-mqtt 1.3.1对于所有客户。

最佳答案

不,客户端 ID 不是已发布消息的一部分。它仅用于在建立连接时向代理标识客户端,以确定是否应遵守存储的消息和持久订阅。

最简单的解决方案是为每个传感器使用单独的主题,但具有共享的根。例如

  • 传感器 1 发布到 A/1
  • 传感器 2 发布到 A/2

然后,客户端将订阅 A/+,这将接收所有消息,并可以使用主题的后半部分来确定它来自哪个传感器。

其他选项如您所建议,即将 id 包含在有效负载中。

关于mqtt - mosquitto 可以转发消息发送者的 ClientID 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51963413/

相关文章:

message-queue - MQ 和 MQTT 有什么区别?

windows - 如何在Windows中的Docker上测试mqtt?

c++ - 使用 g++ 使用 mosquitto 库编译 cpp 代码时出错

python - 重新连接后Mqtt不向订阅者发送数据

c++ - 在 C++ 函数中使用 MQTT 客户端指针

python - on_message 函数正在接收未发送的值

MQTT - 监听 ping、断开和连接事件

java - Paho MQTT 与 MQTT paho spring 集成

linux - mosquitto 订阅测试代理 : Network is unreachable

MQTT:MQTT 客户端每分钟轮询服务器多少次?