SpringBoot整合emqx(MQTT)解决循坏依赖
如果问题欢迎大佬指正!!!
导包
<!--MQTT--><dependency><groupId>org.eclipse.paho</groupId><artifactId>org.eclipse.paho.client.mqttv3</artifactId><version>1.2.2</version></dependency>
配置MQTT连接信息
mqtt:addr: tcp://localhost:1883clientId: client_1username: adminpassword: publickeepAlive: 60timeout: 60
Mqtt消息回调类
@Component
public class PushCallBack implements MqttCallback {@Autowiredprivate MqttConfig config;@Overridepublic void connectionLost(Throwable cause) {System.out.println("连接断开");MqttPushClient client = config.getMqttPushClient();if(client != null){client.connect(config.getAddress(),config.getClientId(),config.getUsername(),config.getPassword(),config.getTimeout(),config.getKeepalive());}}@Overridepublic void messageArrived(String topic, MqttMessage message) throws Exception {System.out.println("收到消息:"+topic+ " "+new String(message.getPayload()));}@Overridepublic void deliveryComplete(IMqttDeliveryToken token) {System.out.println("消息发送完成");}
}
Mqtt发送消息类
@Component
@Data
public class MqttPushClient {@Autowiredprivate PushCallBack pushCallBack;//mqtt连接对象private static MqttClient client;public static void setClient(MqttClient client) {MqttPushClient.client = client;}public static MqttClient getClient() {return client;}/*** 连接mqtt* @param host* @param clientId* @param username* @param password* @param timeout* @param keepalive*/public void connect(String host,String clientId,String username,String password,int timeout,int keepalive){MqttClient client;try{client = new MqttClient(host,clientId);MqttConnectOptions options = new MqttConnectOptions();options.setUserName(username);options.setPassword(password.toCharArray());options.setCleanSession(false);options.setConnectionTimeout(timeout);options.setKeepAliveInterval(keepalive);MqttPushClient.setClient(client);//设置回调类client.setCallback(pushCallBack);IMqttToken iMqttToken = client.connectWithResult(options);boolean complete = iMqttToken.isComplete();System.out.println(complete?"连接成功!":"连接失败!");}catch (Exception e){e.printStackTrace();}}/*** 发送消息* @param topic* @param msg* @param qos*/public void push(String topic,String msg,int qos){MqttMessage message = new MqttMessage();message.setPayload(msg.getBytes(StandardCharsets.UTF_8));message.setQos(qos);message.setRetained(false);MqttTopic mqttTopic = client.getTopic(topic);if (mqttTopic == null){System.out.println("主题不存在!");}else {try {client.publish(topic,message);} catch (MqttException e) {e.printStackTrace();System.out.println("消息发送失败!");}}}
}
初始化MqttClient
@Configuration
@Data
public class MqttConfig {@Value("${mqtt.addr}")private String address;@Value("${mqtt.username}")private String username;@Value("${mqtt.password}")private String password;@Value("${mqtt.clientId}")private String clientId;@Value("${mqtt.timeout}")private Integer timeout;@Value("${mqtt.keepalive}")private Integer keepalive;@Autowiredprivate MqttPushClient mqttPushClient;//当前类创建好之后,连接MQTT break@PostConstructpublic void mqttInit(){mqttPushClient.connect(address,clientId,username,password,timeout,keepalive);}
}
测试
@RequestMapping("/mqtt")
@RestController
public class MqttController {@Autowiredprivate MqttPushClient client;//发送消息@RequestMapping("/send/{msg}")public String send(@PathVariable("msg") String msg) throws MqttException {client.push("wsl",msg,1);return "SUCESS";}//订阅主题@RequestMapping("/sub/{topic}")public String subscribe(@PathVariable("topic") String topic) throws MqttException {MqttPushClient.getClient().subscribe(topic,1);return "SUCESS";}
}
SpringBoot整合emqx(MQTT)解决循坏依赖相关推荐
- Spring是如何解决循坏依赖的?
什么是循环依赖?举一个例子,所谓的循环依赖就是现在有一个A类和一个B类,A里面属性注入了B,也就是依赖了B,B里面也依赖了A,那么这就是循环依赖了,而我们要探究的是spring是怎么在实例化A并且初始 ...
- SpringBoot整合Shiro实现权限控制,验证码
本文介绍 SpringBoot 整合 shiro,相对于 Spring Security 而言,shiro 更加简单,没有那么复杂. 目前我的需求是一个博客系统,有用户和管理员两种角色.一个用户可能有 ...
- springboot整合mybatis
3.springboot整合mybatis 首先新建一个项目,勾选上我们需要的 1.springboot配置数据库连接池druid druid学习地址 https://github.com/aliba ...
- Redis分片主从哨兵集群,原理详解,集群的配置安装,8大数据类型,springboot整合使用
文章目录 Redis介绍 Redis分片 Redis主从 Redis哨兵 Redis集群 Redis持久化策略 RDB AOF 持久化方案选择 Redis内存策略 LRU算法 LFU算法 Random ...
- SpringBoot整合笔记
文章目录 一.SpringBoot快速入门 1.1 快速搭建 1.2 SpringBoot依赖引入 1.3 RestController的使用 1.4 SpringBoot启动方式 二.SpringB ...
- springboot整合shiro和session的详细过程和自定义登录拦截器
文章目录 1.shiro依赖 2.shiro配置 shiro过滤器配置: 关联自定义的其他管理器 自定义会话工厂: 3.登陆时记录用户信息 4.shiro一些工具类的学习 5.自定义登录拦截器 shi ...
- Springboot整合thymeleaf模板
Thymeleaf是个XML/XHTML/HTML5模板引擎,可以用于Web与非Web应用. Thymeleaf的主要目标在于提供一种可被浏览器正确显示的.格式良好的模板创建方式,因此也可以用作静态建 ...
- springboot整合jwt
JWT(Json Web Token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准.JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取 ...
- SpringBoot 整合实现ActiveMQ
目录 一.ActiveMQ介绍 二.ActiveMQ安装.服务端开启 2.1 安装 2.2 服务端启动 三.SpringBoot 整合实现ActiveMQ 3.1添加依赖 3.2添加配置文件(yml文 ...
最新文章
- C#.NET通过Socket实现平行主机之间网络通讯(含图片传输的Demo演示)
- Nginx服务器编译添加SSL模块
- oracle数据库自动备份
- ASP.NET 快乐建站系列–2. Rad Controls 简介
- 创业中创新驱动能力_创业培训课程:创新思维能力塑造
- 构建高性能.NET应用之配置高可用IIS服务器-第四篇 IIS常见问题之:工作进程回收机制(上)
- java 先进先出的map_「 深入浅出 」java集合Collection和Map
- 24--反转字符串中的单词 III
- c语言结构体 单科成绩排序,【查错】怎样让结构体其他信息(姓名)对应关键值(成绩)排序输出...
- 老齐python-基础7(文件操作、迭代)
- mysql amoeba 链接111,mycat1.4 amoeba3.0.5 mysql直连对照_mysql
- python写飞机大战游戏_python实现飞机大战游戏
- php统一处理异常,PHP异常处理
- 如何使用C#操作WinAPI
- java调用打印机打印
- Quartus 在工具栏设置功能快捷方式
- 放大器的频率特性(2)-- 共源极的频率特性
- Maya快捷键、拆UV、上材质
- 浅谈HEVC中的CTU CU PU TU
- OpenGL之路(一)OpenGL、gl、glu、glut的区别 + glut环境的搭建
热门文章
- html查看日历,找出万年历的日历
- 如何生成一个好的appkey和appsecret
- cygwin git mysql,msysgit和Cygwin + git之间的区别?
- 单正态总体的样本均值和样本方差的分布
- Chapter-5_统计推断_贝叶斯学派
- 34.微软账号与Win10正版许可绑定情况查看、绑定方法及使用方法
- jca.jar_JCA 1.5,第1部分,优化和生命周期管理
- Google网上应用店的网址
- 2 万字 + 20张图| 细说 Redis 九种数据类型和应用场景
- 酒店AI机器人被下岗 人工智能没想象中那么可怕