1、环境Win10;
2、JDK 1.8;
3、SpringBoot 2.7.5;
4、MQTTV3 1.2.5
5、EMQX服务器本地安装使用参考:MQTT学习记录(一、Windows)_我也不清楚的博客-CSDN博客_mqtt默认密码
6、MQTTX 官方客户端可视化工具安装参考:MQTT学习记录(一、Windows)_我也不清楚的博客-CSDN博客_mqtt默认密码
7、源码下载: 资源下载中 SpringBoot项目 JAVA MQTT通信
本例为后端整合MQTT通信,也可以前端直接使用,方法参考:中间件:前端JS整合MQTT通信_我也不清楚的博客-CSDN博客
一、EMQX服务器本地安装使用介绍
参考:MQTT学习记录(一、Windows)_我也不清楚的博客-CSDN博客_mqtt默认密码
二、MQTTX可视化操作工具安装使用
参考:MQTT学习记录(一、Windows)_我也不清楚的博客-CSDN博客_mqtt默认密码
三、SpringBoot JAVA客户端
1、项目结构如下:
2、引用 org.eclipse.paho.client.mqttv3 进行MQTT通信,POM.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>mqtt_client</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mqtt_client</name>
<description>mqtt_client</description>
<properties>
<java.version>8</java.version>
<mqttv3.version>1.2.5</mqttv3.version>
<fastjson.version>1.2.78</fastjson.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- mqtt-->
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>${mqttv3.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3、application.yml
server:
port: 8088
spring:
# mqtt 配置
mqtt:
use-flag: true # 是否启用MQTT
username: admin # 账号
password: public # 密码
host-url: tcp://127.0.0.1:11883 # mqtt连接tcp地址
client-id: ${random.int} # 客户端Id,不能相同,采用随机数 ${random.value}
default-topic: mqttDemoTopic # 默认主题
default-qos: 1 # 消息发送方式
default-retained: false # 是否保留
timeout: 30 # 超时时间
keepalive: 30 # 保持连接
clearSession: true # 清除会话(设置为false,断开连接,重连后使用原来的会话 保留订阅的主题,能接收离线期间的消息)
MQTT参数含义如上代码中备注,MQTT连接使用tcp协议,以EMQX服务器中tcp协议端口为标准,如本例中EMQX的tcp协议MQTT端口为1883 / 11883 则,项目作为客户端可使用这两个端口。
4、implements ApplicationRunner 使项目启动时加载run方法,调用emqxClient.connect();进行连接;
5、发布主题(如果主题不存在,则会新建),订阅已有主题
6、模拟测试手动调用发布主题,订阅主题
7、消息回调,即订阅某主题后,另外一方客户端或硬件传感器系统给中间件EMQX的主题发送消息时,JAVA客户端在订阅此主题的前提下将自动接收消息
四、启动测试
1、项目启动 默认创建 / 订阅 默认主题
服务器端可以看到状态
2、模拟在MQTTX客户端发送消息,可以在JAVA客户端收到消息
3、模拟在JAVA客户端新建 / 发布新主题
4、MQTTX也订阅新主题,在JAVA客户端再次发布
5、取消订阅某个主题