MQTT 消息时间戳
MQTT message timestamp
我想恢复 MQTT 消息发布时间戳,但我在订阅者库中找不到支持。另一方面,我看到 MQTT.fx 客户端能够恢复此信息。有人知道如何处理吗?
消息中没有时间戳,MQTT v3 中没有存储此类信息的位置header。
MQTT.fx 必须使用到达客户的时间。
如果您需要发布时间,您必须自己将其添加到消息负载中。
在 Eclipse Mosquitto 中,他们添加了一个插件来支持让代理在用户属性中为消息添加时间戳(仅限 MQQTv5):plugins/message-timestamp(您可能需要拉开发分支来获取此插件)
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,还没有 handle/display 用户属性。
您可以使用自定义格式字符串
示例:
mosquitto_sub -v -t "your topic" -F "%I %t %p"
更多详情:Click here
我想恢复 MQTT 消息发布时间戳,但我在订阅者库中找不到支持。另一方面,我看到 MQTT.fx 客户端能够恢复此信息。有人知道如何处理吗?
消息中没有时间戳,MQTT v3 中没有存储此类信息的位置header。
MQTT.fx 必须使用到达客户的时间。
如果您需要发布时间,您必须自己将其添加到消息负载中。
在 Eclipse Mosquitto 中,他们添加了一个插件来支持让代理在用户属性中为消息添加时间戳(仅限 MQQTv5):plugins/message-timestamp(您可能需要拉开发分支来获取此插件)
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,还没有 handle/display 用户属性。
您可以使用自定义格式字符串
示例:
mosquitto_sub -v -t "your topic" -F "%I %t %p"
更多详情:Click here