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客户端状态(在线离线)的主要内容,如果未能解决你的问题,请参考以下文章
Go MQTT 客户端在收到大约 2400 条消息后停止监听新消息