在MQTT控制台中,判断设备是否在线主要依赖于心跳机制。基于MQTT接入的设备通过心跳保活,这些心跳是周期性的、自动收发和超时重连。当设备的心跳超过一定时间(例如30秒)未上报时,我们一般会判定设备为离线。
具体的实现中,可以采用以下方法来检测设备的在线状态:
使用中心存储:例如Redis,来记录每台设备的在线状态。当设备的MqttConnectMessage
到达broker时,其在线状态会被设置为online;而当MqttDisconnectMessage
或心跳超时被关闭时,设备的状态会被设置为offline。
定时异步线程扫描:可以使用一个Map来记录设备每次心跳的最后时间。当设备发送心跳包时,更新该设备的心跳时间到Map中。接着启动一个定时异步线程扫描这个map,寻找到超时心跳的设备id。
消息收发检查:也可以通过检查设备的消息收发是否正常来判断其是否在线。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/