解决mqtt在线或离线监听问题的多种方法

news2024/12/26 22:48:10

目录

前言

优缺点:

1.创建 DeviceMqttCallBacked类,实现 MqttCallbackExtended 接口,添加带cleintId参数的构造方法。

2. 在Mqtt连接成功之后,设置回调类。

3.执行上述代码,查看emqx界面 

4.从emqx上踢除设备

5.观察控制台结果

6.由于mqtt的尝试重连机制,防止意外掉线,影响消息的传输,会立即重连。


前言

        简单说明一下三种Mqtt监听上线或者离线方法。

方法一:在连接Mqtt的逻辑中添加主题订阅,设置设备上线或离线主题,所有的设备均订阅此主题,在连接时,向该主题发布消息。

方法二: Mqtt物联网云平台,在emqx修改系统主题订阅权限,允许某个ip订阅系统级别主题。

方法三:实现  MqttCallbackExtended,接口,通过构造方法初始化clientId,获取ClientId,从而监听设备的在线或者离线方法。

优缺点:

        方法一:简单方便,只需约定好相关主题即可实现。(基本使用所有应用场景)

        方法二:需要修改emqx的配置文件,能够灵敏的监听设备设备的在线和离线(基本使用所有应用场景)

        方法三:只适用于模拟设备创建的应用场景。

1.创建 DeviceMqttCallBacked类,实现 MqttCallbackExtended 接口,添加带cleintId参数的构造方法。

package com.example.mq.mqtt.callback;

import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallbackExtended;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class DeviceMqttCallBacked  implements MqttCallbackExtended {

    private Logger logger = LoggerFactory.getLogger(DeviceMqttCallBacked.class);
    private String clientId;

    public DeviceMqttCallBacked(){

    }

    public DeviceMqttCallBacked(String clientId){
        this.clientId =clientId;

    }

    @Override
    public void connectComplete(boolean b, String url) {
        logger.info("设备{}:上线啦!",this.clientId);

    }

    @Override
    public void connectionLost(Throwable throwable) {
        logger.info("设备{}:离线啦!",this.clientId);
    }

    @Override
    public void messageArrived(String clientId, MqttMessage mqttMessage) throws Exception {
        logger.info("{}:收到消息{}",this.clientId,mqttMessage.getPayload().toString());

    }

    @Override
    public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
        try {
            logger.info("{}消息送达,消息内容为{}",this.clientId,iMqttDeliveryToken.getMessage());
        }catch (Exception e){
            logger.error("消息异常:{}",e);
        }

    }
}

2. 在Mqtt连接成功之后,设置回调类。

  mqttClient.setCallback(new DeviceMqttCallBacked(mqttClient.getClientId()));

3.执行上述代码,查看emqx界面 

4.从emqx上踢除设备

5.观察控制台结果

6.由于mqtt的尝试重连机制,防止意外掉线,影响消息的传输,会立即重连。

        

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

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

相关文章

html+css 实现hover酷炫发光按钮

前言:哈喽,大家好,今天给大家分享htmlcss 绚丽效果!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 文…

“5G+Windows”推动全场景数字化升级:美格智能5G智能模组SRM930成功运行Windows 11系统

操作系统作为连接用户与数字世界的桥梁,在数字化迅速发展的时代扮演着至关重要的角色,智能设备与操作系统的协同工作,成为推动现代生活和商业效率的关键力量。其中,Windows系统以其广泛的应用基础和强大的兼容性成为全球最广泛使用…

服务器启动jar包的时候报”no main manifest attribute“异常(快捷解决)

所以,哥们,又出现问题咯.没事,我也出现了,哈哈哈哈哈,csdn感觉太麻烦了,所以搞了一篇这个. 没得事,往下看,包解决的. 希望可以帮助到各位,感谢阅览! 小手点个赞,作者会乐烂哈哈哈哈哈哈😆😆😆&#x1f606…

Linux中多线程压缩软件 | Mingz

原文链接:Linux中多线程压缩软件 本期教程 软件网址: https://github.com/hewm2008/MingZ安装: git clone https://github.com/hewm2008/MingZ.git cd MingZ make cd bin ./mingz -h使用源码安装: 若是你的git无法使用安装&am…

【IEEE出版 | 高校主办】第三届人工智能、物联网和云计算技术国际会议(AIoTC 2024)

第三届人工智能、物联网和云计算技术国际会议(AIoTC 2024) 2024 3rd International Conference on Artificial Intelligence, Internet of Things and Cloud Computing Technology 2024年9月13-15日 | 中国武汉 重要信息 大会官网:www.ic…

Jboss 漏洞

一.CVE-2015-7501 访问/invoker/JMXInvokerServlet 开启下载存在漏洞 二.CVE-2017-7504 三CVE-2017-12149 启动vulhub环境,访问/invoker/readonly出现如下界面,说明存在漏洞 使用工具连接 四.Administration Console弱⼝令 访问/admin-console/login…

高职物联网智慧农业实训室建设方案

一、项目概述 随着物联网技术的迅猛发展及其在农业领域的广泛应用,智慧农业已经成为推动农业现代化的关键力量。近年来,国家高度重视物联网技术在农业领域的应用与发展,出台了一系列相关政策支持智慧农业建设。如《数字乡村发展战略纲要》明…

Dubbo框架实现RPC远程调用

项目背景介绍 这个技术我是直接在项目中运用并且学习的,所以我写笔记最优先的角度就是从项目背景出发 继上一次API网关完成了这个实现用户调用一次接口之后让接口次数增多的操作之后,又迎来了新的问题。 就是我们在调用接口的时候需要对用户进行校验&…

苍穹外卖day12(day15)---数据统计——Excel报表(项目完结)

工作台 接口设计 新建admin/WorkSpaceController /*** 工作台*/ RestController RequestMapping("/admin/workspace") Slf4j Api(tags "工作台相关接口") public class WorkSpaceController {Autowiredprivate WorkspaceService workspaceService;/*** 工…

★WIN10计算器程序员版的使用说明(详细)

主界面 拉动边框的角: 1.进制转换 HEX(hexadecimal):显示十六进制,DEC(decimal):显示十进制,OCT(octonary):显示八进制,BIN(binary):显示二进制 例如: 选中HEX 0~9,A…

Genymotion adb shell

Genymotion 账户是 qq邮箱 参考 Ubuntu 20.04 安装 Android 模拟器 Genymotion https://www.zzzmh.cn/post/553cd96d4e47490a90b3302a76a93c0d Genymotion adb shell adb shell C:\Program Files\Genymobile\Genymotion\tools>adb shell lsusb Bus 001 Device 001: ID …

【Bug分析】Keil报错:error: #18:expected a “)“问题解决

【Bug分析】Keil报错:error: #18:expected a “)”问题解决 前言bug查找bug解决方法小结 前言 keil编译时出现一个问题,缺少一个右括号。然后仔细查看代码,并没有括号缺失。 如下,代码括号正常。 bug查找 站内文章…

多机部署, 负载均衡-LoadBalance

目录 1.负载均衡介绍 1.1问题描述 1.2什么是负载均衡 1.3负载均衡的一些实现 服务端负载均衡 客户端负载均衡 2.Spring Cloud LoadBalancer 2.1快速上手实现负载均衡 2.2负载均衡策略 自定义负载均衡策略 3.服务部署(Linux) 3.1服务构建打包…

企业发展与智能化改造:从传统到现代的转型之路

引言 在当今全球化和数字化快速发展的背景下,企业面临着前所未有的竞争压力和市场变化。传统的商业模式已难以满足不断变化的市场需求和客户期望,迫使企业探索新的增长路径和创新方式。在这种情况下,智能化改造成为了企业发展的关键战略之一。…

springboot“云茶”新零售系统-计算机毕业设计源码25947

摘 要 科技的发展、企业的改革和管理技术的提高,中国很多中小型企业面临库存管理的时效性、准确性等难题。以前在网站上,企业的信誉难以认证、网络法律法规不健全、物流不发达等一系列的原因,限制了网上交易发展的步伐,进入21世纪…

【OpenCV C++20 学习笔记】拉普拉斯(Laplace)二阶求导-边缘检测

拉普拉斯二阶求导 原理拉普拉斯算子(Laplacian Operator) API实例 原理 在OpenCV中,Sobel算法可以对图片中的值求一阶导数,从而计算出图片中的边缘线。其原理如下面的示意图: 那么,如果再求一次导数的,即求二阶导数&…

软信天成:国内企业需要什么样的国产主数据管理平台?(一)

主数据管理作为政企数据治理的基石,承担着维护、治理关键业务实体信息(客户、产品、供应商、员工等核心数据)的重任,确保其在整个组织内的一致性、完整性和准确性。 在当下的环境中,企业正面临诸多考验:一…

AQS为什么采用双向链表?

单链表和双链表的区别 首先我们要先搞清楚单链表和双链表之间的区别: 单链表每个节点只包含一个指向下一个节点的指针,因此它的遍历只能是单向的,并且插入和删除需要遍历链表找到前一个节点(比如a->b->c->d&#xff0c…

录屏新选择!Bandicam来袭,满足你所有录制需求,好用到爆!

前言 嘿,各位小伙伴们,你们的小江湖又来啦!今天,我要给大家带来一个超级神秘又酷炫的软件介绍,保证让你们大开眼界,甚至可能改变你们日常记录生活、工作学习的方式哦! 想象一下,有没…

硬件模拟的基本原理

具体来说,这种设计方法减少了集成电路 (IC) 设计和开发的设计迭代次数,并且广泛适用于所有电力电子设计。我详细介绍了我在快速上市 IC 开发方面的经验,并将该方法与其他旨在缩短产品开发时间的技术进行了对比。 产品开发流程 图 1&#xff…