zl程序教程

您现在的位置是:首页 >  后端

当前栏目

中间件:SpringBoot-JAVA整合MQTT通信

2023-09-11 14:20:51 时间

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、取消订阅某个主题