Timestamp MQTT消息时间戳

Timestamp MQTT消息时间戳,timestamp,mqtt,Timestamp,Mqtt,我想恢复MQTT消息发布时间戳,但在订阅服务器库中找不到支持。另一方面,我看到MQTT.fx客户端能够恢复此信息。有人知道怎么处理吗 消息时间戳“>消息中没有时间戳,MQTT标头中没有存储此类信息的位置 MQTT.fx必须使用到达客户端的时间 如果您需要发布时间,您必须自己将其添加到消息负载中。在Eclipse Mosquitto中,他们添加了一个插件,以支持在用户属性(仅MQQTv5)中为消息添加代理时间戳:插件/消息时间戳(您可能需要拉动开发分支以获得此插件) 插件代码来自: 用户属性与M

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


消息时间戳“>

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

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


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

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

插件代码来自:

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

  • 向消息负载添加时间戳(因为发布者时间戳可能无效,并增加负载的复杂性)
  • 避免使用retain(在订阅服务器上创建时间戳和缓存数据的需要)

虽然Paho支持MQTTv5,但一些语言变体不支持。一些常见的调试工具,如支持MQTTv5的MQTT Explorer,还没有处理/显示用户属性。

您还没有说哪个MQTT代理有此插件。此外,Paho Python客户端也支持MQTTv5(Paho网站只需要更新)谢谢,我根据你的反馈改进了我的答案
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);
}