使用的EMQX 版本为 [5.8.4 (Open Source)]
$SYS/brokers/${node}/clients/connected 和disconnected 事件中,怎么没有连接属性,用的MQTT V5 协议连接也没有? 这正常么?
$events/client_connected 和 disconnected 事件中有连接属性,但在离线事件中不带对应的上线时间? 而系统主题中的离线事件,却带 对应的上线时间 这正常么?
$events/client_disconnected 事件中,可以带上对应的上线时间么? 因为在实际测试中,客户端网络不好的情况下,设备会多次断开重连,其中断开消息会晚于最新的在线消息,导致覆盖掉最新的消息;
实测数据如下:
序号为1的离线事件,是序号3 在线事件对应的事件
序号2 为设备的最终状态,但序号3 的离线事件,在业务逻辑中不特殊处理的情况下,会覆盖掉设备的最终状态
1、 {\"ipaddress\":\"36.110.46.106\",\"disconnected_at\":1740160870627,\"sockport\":8883,\"connected_at\":1740160813688,\"proto_name\":\"MQTT\",\"proto_ver\":5,\"clientid\":\"80482C7B0FE8\",\"username\":\"80482C7B0FE8\",\"ts\":1740160870627,\"protocol\":\"mqtt\",\"reason\":\"ssl_closed\"}"
2、 {\"ipaddress\":\"36.110.46.106\",\"expiry_interval\":5000,\"clean_start\":false,\"sockport\":8883,\"connected_at\":1740160856111,\"proto_name\":\"MQTT\",\"proto_ver\":5,\"clientid\":\"80482C7B0FE8\",\"username\":\"80482C7B0FE8\",\"ts\":1740160856111,\"protocol\":\"mqtt\",\"keepalive\":60}"
3、 {\"ipaddress\":\"36.110.46.106\",\"expiry_interval\":5000,\"clean_start\":false,\"sockport\":8883,\"connected_at\":1740160813688,\"proto_name\":\"MQTT\",\"proto_ver\":5,\"clientid\":\"80482C7B0FE8\",\"username\":\"80482C7B0FE8\",\"ts\":1740160813688,\"protocol\":\"mqtt\",\"keepalive\":60}"
4、 {\"ipaddress\":\"36.110.46.106\",\"disconnected_at\":1740160807434,\"sockport\":8883,\"connected_at\":1740139101779,\"proto_name\":\"MQTT\",\"proto_ver\":5,\"clientid\":\"80482C7B0FE8\",\"username\":\"80482C7B0FE8\",\"ts\":1740160807434,\"protocol\":\"mqtt\",\"reason\":\"ssl_closed\"}"
在系统主题中每个离线事件有在线时间,可以根据在线时间判断,是否要丢弃到该离线事件;但通过规则引擎过来的数据离线数据,不带上线时间,就无法做这个判断;