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