【发布时间】:2016-09-16 04:39:19
【问题描述】:
我想恢复 MQTT 消息发布时间戳,但在订阅者库中找不到支持。另一方面,我看到 MQTT.fx 客户端能够恢复此信息。有谁知道怎么处理?
【问题讨论】:
我想恢复 MQTT 消息发布时间戳,但在订阅者库中找不到支持。另一方面,我看到 MQTT.fx 客户端能够恢复此信息。有谁知道怎么处理?
【问题讨论】:
消息中没有时间戳,MQTT头中也没有此类信息的存储位置。
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)尚未处理/显示用户属性。
【讨论】:
【讨论】:
/开头