【问题标题】:MQTT message timestampMQTT 消息时间戳
【发布时间】:2016-09-16 04:39:19
【问题描述】:

我想恢复 MQTT 消息发布时间戳,但在订阅者库中找不到支持。另一方面,我看到 MQTT.fx 客户端能够恢复此信息。有谁知道怎么处理?

【问题讨论】:

    标签: timestamp mqtt


    【解决方案1】:

    消息中没有时间戳,MQTT头中也没有此类信息的存储位置。

    MQTT.fx 必须使用到达客户端的时间。

    如果您需要发布时间,您必须自己将其添加到消息负载中。

    【讨论】:

      【解决方案2】:

      在 Eclipse Mosquitto 中,他们添加了一个插件来支持代理在用户属性中为消息添加时间戳(仅限 MQQTv5):plugins/message-timestamp(您可能需要拉取开发分支才能获取此插件)

      插件代码来自: https://github.com/eclipse/mosquitto/blob/develop/plugins/message-timestamp/mosquitto_message_timestamp.c

      static int callback_message(int event, void *event_data, void *userdata)
      {
          struct mosquitto_evt_message *ed = event_data;
          struct timespec ts;
          struct tm *ti;
          char time_buf[25];
      
          clock_gettime(CLOCK_REALTIME, &ts);
          ti = gmtime(&ts.tv_sec);
          strftime(time_buf, sizeof(time_buf), "%Y-%m-%dT%H:%M:%SZ", ti);
      
          return mosquitto_property_add_string_pair(&ed->properties, MQTT_PROP_USER_PROPERTY, "timestamp", time_buf);
      }
      

      用户属性不向后兼容 MQTTv3。如果您卡在 MQTTv3 上,那么您可以:

      • 为您的消息负载添加时间戳(难看,因为发布者时间戳可能无效并增加负载的复杂性)
      • 避免使用保留(导致订阅者需要时间戳和缓存数据)。

      虽然 Paho 支持 MQTTv5,但某些语言变体不支持。并且一些常见的调试工具(例如支持 MQTTv5 的 MQTT Explorer)尚未处理/显示用户属性。

      【讨论】:

      • 你还没有说哪个 MQTT 代理有这个插件。 Paho Python 客户端也支持 MQTTv5(Paho 网站只需要更新)
      • 谢谢,我根据您的反馈改进了我的答案
      【解决方案3】:

      您可以使用自定义格式字符串

      示例:

      mosquitto_sub -v -t "your topic" -F "%I %t %p"
      

      更多详情:Click here

      【讨论】:

      • 主题不应以/开头
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      • 1970-01-01
      • 2015-09-09
      • 2018-03-06
      • 2021-08-17
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多