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);
        }
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章