SpringBoot集成mqtt上下线提醒功能设计

目录

1.首先安装emqx,去官网下载emqx压缩包,并且解压。

[2.使用emqx start 命令启动emqx后台管理](#2.使用emqx start 命令启动emqx后台管理)

3.下载mqttx调试工具,使用mqttx调试mqtt连接。下载地址:MQTTX下载-MQTTX官方版下载,下载完成直接打开,便可进行mqtt连接调试

4.登录emqx后台,我们需要对emqx进行系统主题的订阅,给客户端设置允许系统主题的订阅,这样就能及时监听到连接设备的消息了。

5.关键代码

6.运行效果如下:

7.这次的上下线监听对比之前的方案效果可能更加,欢迎大家多多提建议,以及指正。


1.首先安装emqx,去官网下载emqx压缩包,并且解压。

2.使用emqx start 命令启动emqx后台管理

3.下载mqttx调试工具,使用mqttx调试mqtt连接。下载地址:MQTTX下载-MQTTX官方版下载,下载完成直接打开,便可进行mqtt连接调试

4.登录emqx后台,我们需要对emqx进行系统主题的订阅,给客户端设置允许系统主题的订阅,这样就能及时监听到连接设备的消息了。

5.关键代码

java 复制代码
package com.mqtt.demo.listener;

import ch.qos.logback.core.net.server.Client;
import com.alibaba.fastjson.JSONObject;
import com.mqtt.demo.entity.QosEnum;
import org.eclipse.paho.client.mqttv3.IMqttMessageListener;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MqttOnOffListener  {
    private Logger logger = LoggerFactory.getLogger(MqttOnOffListener.class);
    private static final  String onOffLineTopic = "$SYS/brokers/+/clients/#";
    private MqttClient mqttClient;
    public MqttOnOffListener(MqttClient mqttClient){
        this.mqttClient =mqttClient;
    }
    public void initListener() throws MqttException {
        IMqttMessageListener listener = new IMqttMessageListener() {
            @Override
            public void messageArrived(String s, MqttMessage mqttMessage) {
                logger.info("监听到的消息:{}", mqttMessage.toString());
                JSONObject jsonObject = JSONObject.parseObject(mqttMessage.toString());
                String clientId = jsonObject.getString("clientid");
                logger.info("clientId:{}",clientId);
                String  connected_at = jsonObject.getString("connected_at");
                String  disconnected_at = jsonObject.getString("disconnected_at");
                if(null!=connected_at && null!=disconnected_at){
                    logger.info("设备:{}已离线!",clientId);
                }
                if (null!=connected_at && null ==disconnected_at){
                    logger.info("设备:{}上线啦!",clientId);
                }

            }
        };
        mqttClient.subscribe(onOffLineTopic, QosEnum.QOS2.getType(),listener);
    }
}

6.运行效果如下:

7.这次的上下线监听对比之前的方案效果可能更加,欢迎大家多多提建议,以及指正。

相关推荐
qfljg1 小时前
OpenRewrite 实战指南
java
朱 欢 庆1 小时前
云服务器附件备份到本机内网服务器
运维·服务器·前端·经验分享
Sylvia33.1 小时前
LOL实时数据接入深度解析:从WebSocket到完整数据模型
java·网络·python·websocket·网络协议
2601_962071576 小时前
【Java报错已解决】org.springframework.beans.factory.BeanCreationException
java·开发语言
支支დ7 小时前
VO by Vercel 前端特定优势:为什么它是构建 AI 应用的新范式
前端·人工智能
zww89491117 小时前
酒馆预约系统开发实战:从需求分析到上线全流程指南
java·eclipse
香芋芋圆7 小时前
AI 冲击内卷之下,普通前端如何破局?WebGIS—— 低门槛突围赛道
前端·javascript·人工智能·学习·职场发展
INS_KF8 小时前
【编程笔记】成员函数中两个 const 的区别(const Data &getData() const;)
前端·javascript·笔记
宿6748 小时前
vue3-async
前端·javascript·vue.js
YXWik68 小时前
记录前端请求接口在浏览器请求响应的Preview和Response展示的一样的问题
前端