我想恢复MQTT消息发布时间戳,但我在订阅者库中找不到支持。另一方面,我看到MQTT.fx客户端能够恢复此信息。谁知道如何处理?
答案 0 :(得分:4)
消息中没有时间戳,没有在MQTT头中存储此类信息的位置。
MQTT.fx必须使用到达客户的时间。
如果您需要已发布的时间,则必须自己将其添加到消息有效内容中。
答案 1 :(得分:0)
Moment可用于解决问题。它是一个轻量级的JavaScript日期和时间库,用于解析,验证,操作和格式化日期和时间。记录消息到达订户端的时间。
client.on('message', function (topic, message) {
console.log(message.toString());
var Time = moment().format('HH:mm:ss');
console.log(Time);
});
使用片刻,您还可以发送时间戳以及来自发布者的JSON格式的数据。
答案 2 :(得分:0)
在 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,还不能处理/显示用户属性。