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

news2024/12/24 21:35:08

目录

1.首先安装emqx,去官网下载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.关键代码

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1818676.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ping: www.baidu.com: 未知的名称或服务(IP号不匹配)

我用的是VMware上的Red Hat Enterprise Linux 9,出现了能联网但ping不通外网的情况。 问题描述:设置中显示正常连接,而且虚拟机右上角有联网的图标,但不能通外网。 按照网上教程修改了/etc/resolv.conf和/etc/sysconfig/network-…

公交车载视频监控系统解决方案

公交车载视频监控系统基于iVMS-7200移动视频监控管理平台,通过3G/4G网络接入车载前端,实现实时监控、录像回放、GIS地图定位、轨迹回放、设备状态查询、紧急报警等功能。 车载前端包含车载硬盘录像机(简称车载DVR或MDVR)、车载专用摄像机、车载LCD显示屏…

谷粒商城实战(035 k8s集群学习1-前置介绍)

Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强 总时长 104:45:00 共408P 此文章包含第339p-第p342的内容 分布式高级篇总结 高可用集群 内容 k8s介绍 为什么使用k8s 组件 master组件 node(节点)组件 要部…

操作系统——信号

将信号分为以上四个阶段 1.信号注册:是针对信号处理方式的规定,进程收到信号时有三种处理方式:默认动作,忽略,自定义动作。如果不是自定义动作,这一步可以忽略。这个步骤要使用到signal/sigaction接口 2.…

代码随想录算法训练营第五十八天 | 392.判断子序列

392.判断子序列 题目链接:代码随想录 视频讲解:动态规划,用相似思路解决复杂问题 | LeetCode:392.判断子序列_哔哩哔哩_bilibili 解题思路 本题和求最长公共子序列是一样的,值就是s字符串的长度,如果一致…

不吃饭也要搞懂的 git 命令

昨天睿哥布置了一个任务给我,让我学习一下 Git 的一些命令。 我问睿哥,到底我们在实际开发中用哪些命令会比较多,睿哥是这样回答我的: 而且他推荐我用 IDEA 自带的那个 Git 面板来执行 git 命令,他说直接敲命令太麻烦…

一线大厂都在高薪抢AI产品经理?

哈喽,大家下午好呀~ 当AI的风吹到产品届,唯叹相见恨晚! 作为一名产品经理,日常写调研、需求分析、产品设计、项目管理、数据分析……每一项工作都需要投入大量的时间和精力。 但用上AI后,你会发现写个需…

【面经总结】Java基础 - IO

序列化 什么是序列化和反序列化? 序列化:将对象转换为二进制数据 反序列化:将二进制数据转换为对象 目的:方便网络传输、持久化保存 Java 是怎么实现序列化的? Java 通过对象输入输出流来实现序列化和反序列化&a…

关于docker无法正常下载镜像的问题

文章目录 之前还可以正常下载镜像,但是一段时间之后就无法下载了,猜测可能是政治原因,无法连接到国外服务器,所以我设置了阿里云的镜像加速器。 配置方法如下: 前往阿里云(https://help.aliyun.com/zh/acr/…

Windows同一文件夹下支持大小写同名文件

举例:同一文件目录下需要存在A.java, a.java, Windows是不支持的,这时候需要建一个Linux子系统的文件夹 创建教程 1、在启用或关闭Windows功能下面找到 适用于Linux系统的Windows子系统 2、cmd 执行命令 fsutil file SetCaseSensitiveInfo 文件夹路径 …

网格简化技术在AI绘画中的革新应用

随着人工智能技术的飞速发展,AI绘画作为其创新应用领域之一,正逐渐进入公众的视野。AI绘画不仅为艺术家和设计师提供了强大的辅助工具,也为非专业人士开启了艺术创作的大门。然而,高质量的AI绘画往往需要复杂的计算过程&#xff0…

C# WPF入门学习主线篇(二十七)—— 数据源

C# WPF入门学习主线篇(二十七)—— 数据源 在WPF开发中,数据绑定是一个强大的功能,它允许UI元素和数据源之间进行双向通信。理解和使用数据源对于创建高效和动态的应用程序至关重要。在本文中,我们将详细介绍WPF中的数…

servlet梦想酒店管理系统

梦想酒店管理系统 酒店管理系统分为管理端,和用户端, 用户端可以查看酒店客房,预定酒店系统,查询预定信息。 管理端:用户管理,类型,房间管理,业务管理,统计分析。 技术&…

使用Python保护或加密Excel文件的7种方法

目录 安装Python Excel库 Python 使用文档打开密码保护 Excel 文件 Python 使用文档修改密码保护 Excel 文件 Python 将 Excel 文件标记为最终版本 Python 保护 Excel 工作表 Python 在保护 Excel 工作表的同时允许编辑某些单元格 Python 锁定 Excel 工作表中的特定单元…

Elasticsearch:智能 RAG,获取周围分块

作者:来自 Elastic Sunile Manjee 在检索增强生成 (RAG) 领域,一个持续存在的挑战是找到输入大型语言模型 (LLM) 的最佳数据量。数据太少会导致响应不足或不准确,而数据太多会导致答案模糊。这种微妙的平衡启发我开发了一个专注于智能分块和利…

ssm的疫情物资管理系统

ssm的疫情物资管理系统 功能:前端页面展示 用户端:主页展示,新闻展示,疫情物资,在线留言,全国疫情,健康打卡,注册,登录 后端管理:登录,账号管理…

2024怎么选择开放式耳机?五款高评分机型推荐!

还记得我最早接触到不入耳的耳机是在前几年,上课需要一副耳机,我又受不住长时间的戴耳机,那时候如利刃一款蛮贵的开放式耳机,时过境迁现在已随着人们的需求发展至到至今的真无线的开放式蓝牙耳机,我也在这几年之内入手…

Postman下发流表至Opendaylight

目录 任务目的 任务内容 实验原理 实验环境 实验过程 1、打开ODL控制器 2、网页端打开ODL控制页面 3、创建拓扑 4、Postman中查看交换机的信息 5、L2层流表下发 6、L3层流表下发 7、L4层流表下发 任务目的 1、掌握OpenFlow流表相关知识,理解SDN网络中L…

【AI绘画】Stable Diffusion 3开源

Open Release of Stable Diffusion 3 Medium 主要内容 Stable Diffusion 3是Stability AI目前为止最先进的文本转图像开放源代码算法。 这款模型的小巧设计使其完美适合用于消费级PC和笔记本电脑,以及企业级图形处理单元上运行。它已经满足了标准化的文字转图像模…

红黑树(C++)

文章目录 写在前面1. 红黑树的概念及性质1. 1 红黑树的概念1. 2 红黑树的性质 2. 红黑树节点的定义3. 红黑树的插入3.1 按照二叉搜索的树规则插入新节点3.2 检测新节点插入后,红黑树的性质是否造到破坏 4.红黑树的删除5.红黑树的验证6.源码 写在前面 在上篇文章中&…