java如何监听MQTT客户端状态(在线离线)

Posted OkidoGreen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java如何监听MQTT客户端状态(在线离线)相关的知识,希望对你有一定的参考价值。

一、业务场景

好多朋友在咨询如何得知(监测)MQTT客户端状态(在线、离线),或者可以说是监测采集器状态。

其实这个在MQTT协议中已经给出系统主题,MQTT服务端可以知道客户端的任何情况,比如:什么时候上线和下线。

二、解决方案

$SYS/brokers/$node/clients/$clientid/connected:上线事件。当某客户端上线时,会向该主题(Topic)发布消息

 $SYS/brokers/$node/clients/$clientid/disconnected:掉线事件。当某客户端掉线时,会向该主题(Topic)发布消息

当然在开发的时候我们订阅两个主题比较麻烦,在这里我们可以采用主题通配符模式直接订阅一个主题即可:

$SYS/brokers/+/clients/#

这样比较方便,只不过需要我们在回调函数中进行Topic主题的区分就可以了,例如:

    /**
     * subscribe后得到的消息会执行到这里面
     */
    @Override
    public void messageArrived(String topic, MqttMessage message) throws Exception 
        String msg = new String(message.getPayload());
        try 
            JSONObject jsonObject = JSON.parseObject(msg);
            String clientId = String.valueOf(jsonObject.get("clientid"));
            if (topic.endsWith("disconnected")) 
                log.info("客户端已掉线:",clientId);
             else 
                log.info("客户端已上线:",clientId);
            
         catch (JSONException e) 
            log.error("JSON Format Parsing Exception : ", msg);
        
    

 

以上是关于java如何监听MQTT客户端状态(在线离线)的主要内容,如果未能解决你的问题,请参考以下文章

JavaWeb开发网站,监测用户在线状态

前几条消息在传输到离线的 mqtt 客户端时丢失

Go MQTT 客户端在收到大约 2400 条消息后停止监听新消息

如何在 Android 中检测设备状态离线/在线

Android:如何使用 quickblox 维护用户在线/离线状态?

RockeMQ通过代码监控消费者状态