Mqtt mosquitto能否转发邮件发件人的客户端ID?

Mqtt mosquitto能否转发邮件发件人的客户端ID?,mqtt,mosquitto,paho,Mqtt,Mosquitto,Paho,我正在使用MQTT代理。 此外,我有多个(目前有10个,但数量会增加)客户端定期将一些传感器数据发布到主题A。这些客户端在技术上是相同的,但有唯一的标识符(序列号) 我还有一个订阅topica的客户端,以便接收已发布的消息并将传感器值保存在数据库中。 我当然需要知道哪个传感器(即客户端)发送了特定值 作为一种解决方案,可以将一些传感器ID附加到每个已发布消息的有效负载上。但是,由于传感器通过GSM访问代理,我需要保持低流量,所以我试图避免这种情况 我假设,代理本身知道哪个消息来自哪个客户端,尤其

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

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

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

我假设,代理本身知道哪个消息来自哪个客户端,尤其是在使用临时连接时,即
clean\u session=False
。对吗? 如果是,订阅客户端是否有可能在收到消息时获得
客户端id
? 可以在MOSQUITO中配置它吗?或者这是默认行为,而我遗漏了什么


我正在为所有客户端使用。

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

最简单的解决方案是为每个传感器使用一个单独的主题,但使用一个共享根。e、 g

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


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

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

最简单的解决方案是为每个传感器使用一个单独的主题,但使用一个共享根。e、 g

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


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

可以使用有效负载(消息)发送客户端id。但您需要在发布服务器端的有效负载(消息)中使用分隔符。示例:Publisher将有效负载发送为“client ID=3-temperature=29”。在订户端,使用strtok()删除分隔符。
代理端没有可用的配置。

可以发送带有负载(消息)的客户端id。但您需要在发布服务器端的有效负载(消息)中使用分隔符。示例:Publisher将有效负载发送为“client ID=3-temperature=29”。在订户端,使用strtok()删除分隔符。 代理端没有可用的配置

  • 根据我对mosquitto的经验,我认为mosquitto在重新发布接收到的消息时没有改变主题或负载的选项

  • 然而,我认为这只是一个执行问题。 理论上,我认为支持这种特性是好的,因为它根本不违反MQTT规范。 (,第3.3.2.1节)

  • 正如@hardillb所指出的,当前问题的实际解决方案是使用不同的主题发布,但使用带有通配符(+或#)的主题接收,或者在有效负载中包含发布者信息

  • 根据我对mosquitto的经验,我认为mosquitto在重新发布接收到的消息时没有改变主题或负载的选项

  • 然而,我认为这只是一个执行问题。 理论上,我认为支持这种特性是好的,因为它根本不违反MQTT规范。 (,第3.3.2.1节)

  • 正如@hardillb所指出的,当前问题的实际解决方案是使用不同的主题发布,但使用带有通配符(+或#)的主题接收,或者在有效负载中包含发布者信息


  • 我也想到了这个。但在主题中加入连载仍然会增加流量。是否有可能代理将clientId附加到消息中?不,代理无法修改消息我也想到了这一点。但在主题中加入连载仍然会增加流量。是否有可能代理将clientId附加到消息中?否,代理无法修改消息
    However, since the Server is permitted to override the Topic Name,  
    it might not be the same as the Topic Name in the original PUBLISH Packet.