JAvaはMQTTクライアントの状態(オンライン、オフライン)をどのように傍受するか


一、業務シーン
多くの友人がMQTTクライアントの状態(オンライン、オフライン)をどのように知るか、あるいは収集器の状態を監視するかを相談しています.
実はこれはMQTTプロトコルの中ですでにシステムのテーマを提供して、MQTTサービス側はクライアントのいかなる情況を知ることができて、例えば:いつオンラインとオフラインです.
二、解決策
$SYS/brokers/${node}/clients/${clientid}/connected:オンラインイベント.クライアントがオンラインになると、そのトピック(Topic)にメッセージが発行されます.
 $SYS/brokers/${node}/clients/${clientid}/disconnected:オフラインイベント.クライアントがオフラインになると、そのトピック(Topic)にメッセージが発行されます.
もちろん開発時に2つのトピックを購読するのは面倒ですが、ここではトピックワイルドカードモードで1つのトピックを直接購読することができます:$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);
        }
    }