MQTT入门:在Spring Boot中建立连接及测试

news/2024/12/25 21:41:50/

文章目录

    • 项目配置
    • 编写MQTT测试类
      • 代码解析
    • 验证连接状态
    • 运行测试
    • 总结

在物联网(IoT)应用中,消息队列遥测传输(MQTT)作为一种轻量级的消息协议,因其低带宽需求和高效传输特点,广泛应用于设备通信中。对于刚接触MQTT的开发者来说,了解如何在Spring Boot项目中集成MQTT客户端并建立连接是迈向实际应用的重要一步。今天,我将分享一个详细的入门指南,带你一步步在Spring Boot中建立MQTT连接,并通过JUnit进行简单的单元测试。

项目配置

首先,我们需要在pom.xml中配置Spring Boot的父依赖以及必要的MQTT和测试依赖。以下是一个示例配置:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.5</version>
</parent><dependencies><!-- Spring Boot整合JUnit单元测试的起步依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><!-- MQTT Java客户端依赖 --><dependency><groupId>org.eclipse.paho</groupId><artifactId>org.eclipse.paho.client.mqttv3</artifactId><version>1.2.5</version></dependency></dependencies>

在这个配置中,我们引入了spring-boot-starter-test用于单元测试,以及org.eclipse.paho.client.mqttv3作为MQTT客户端库。这些依赖为我们后续的开发和测试提供了必要的基础。

编写MQTT测试类

接下来,我们在项目中创建一个测试类MqttPahoTest,用于测试MQTT连接的建立。以下是完整的代码示例:

java">package com.takumilove.mqtt.test;import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import org.junit.jupiter.api.Test;/*** @author: Takumilove* @description: 通过JUnit测试,验证MQTT客户端与服务器的连接是否成功。* @date: 2024/12/13**/
public class MqttPahoTest {// MQTT服务器地址String serverURI = "tcp://156.238.***.***:1883";// 客户端IDString clientId = "paho_test";@Testpublic void createConnection() throws MqttException {// 创建MqttClient对象,使用内存持久化MqttClient mqttClient = new MqttClient(serverURI, clientId, new MemoryPersistence());// 配置连接选项MqttConnectOptions options = new MqttConnectOptions();options.setUserName("admin"); // 设置用户名options.setPassword("123456".toCharArray()); // 设置密码options.setCleanSession(true); // 设置是否清除会话// 连接到MQTT服务器mqttClient.connect(options);System.out.println("连接成功");// 让当前线程阻塞,保持连接while (true) ;}
}

代码解析

  1. 导入必要的类:我们引入了MqttClientMqttConnectOptions等类,这些都是Paho MQTT客户端库提供的,用于建立和管理MQTT连接。

  2. 配置MQTT服务器信息

    • serverURI:指定MQTT服务器的地址和端口。
    • clientId:为客户端生成一个唯一的ID。
  3. 创建MQTT客户端

    • 使用MqttClient构造函数,传入服务器URI、客户端ID以及持久化策略(这里使用内存持久化MemoryPersistence)。
  4. 设置连接选项

    • setUserNamesetPassword:设置连接MQTT服务器所需的认证信息。
    • setCleanSession:决定是否清除会话,true表示每次连接都是新的会话。
  5. 建立连接

    • 调用connect方法,使用之前配置的选项与MQTT服务器建立连接。
    • 成功连接后,输出“连接成功”。
  6. 保持连接

    • 通过一个无限循环while (true);,保持当前线程不退出,以维持MQTT连接。

验证连接状态

成功运行上述测试类后,连接是否建立成功可以通过MQTT服务器的管理仪表盘进行验证。大多数MQTT服务器,如Mosquitto、HiveMQ等,都会提供一个仪表盘界面,用于监控当前连接的客户端。

在仪表盘中,你应该能够看到刚刚创建的客户端paho_test已经成功连接。连接状态通常会显示为“在线”或“已连接”,并且可能会显示一些连接细节,如客户端ID、连接时间等。通过这种方式,你可以直观地确认MQTT客户端与服务器之间的连接是否正常建立,为后续的消息发布和订阅操作奠定基础。

运行测试

确保你的MQTT服务器(例如Mosquitto)已经启动,并且能够接受来自客户端的连接。然后运行上述测试类,如果一切配置正确,你应该会在控制台看到“连接成功”的提示。同时,在MQTT服务器的仪表盘中,可以看到客户端paho_test的连接状态。
在这里插入图片描述

总结

通过以上步骤,我们成功地在Spring Boot项目中集成了MQTT客户端,并通过JUnit进行了简单的连接测试。


http://www.ppmy.cn/news/1558088.html

相关文章

MONI后台管理系统-系统三员的设计

前言&#xff1a; 本项目设计立足于等保测评&#xff08;国家信息安全等级保护三级认证&#xff09;&#xff0c;国家信息安全等级保护三级认证中的“三员管理”是指为了确保信息系统的安全性、稳定性和可靠性&#xff0c;而设立的系统管理员、安全管理员和审计管理员三个独立角…

golang异常

panic如果不处理会导致应用进程挂掉 defer recover可以处理这种情况 一个recover只处理自己协程 产生panic的情况 空指针 数组越界 空map中添加键值对 错误&#xff0c;error接口&#xff0c;不严重 error.wrapof解决嵌套问题或者error.unwrap erroe.is方法&#xff0c;判断是…

neo4j console 报错

项目场景&#xff1a; neo4j 开启失败 问题描述 在终端打开 neo4j 失败打开cmd, 输入: neo4j console 报错 原因分析&#xff1a; 1 可能是没有配置环境变量2 当前脚本的执行策略有问题 解决方案&#xff1a; 解决没有配置环境变量 添加环境变量 在path路径中将变量添加进去…

企业级NoSql数据库REDIS集群

1.1数据库主要分为两大类:关系型数据库与 NoSQL数据库 关系型数据库&#xff0c;是建立在关系模型基础上的数把库&#xff0c;其借助于集合代数等数学概念和方法来处理数据库中的数掘主流的 MySQLOracle、Ms sOLSerer和 DB2 都属于这类传统数据库 NoSQL数据库&#xff0c;全称…

[Unity]Unity集成NuGet-连接mysql时的发现

本次使用软件信息&#xff1a; Unity&#xff1a;2022.3.34f1c1。 mysql&#xff1a;mysql 8.0 安装于远程服务器。 使用插件&#xff1a;NuGetForUnity4.1.1.unitypackage 点击名称可前往下载界面。 一、导入插件 打开Unity的时候可直接双击导入道assets。导入后如下图&…

java 核心知识点——JVM

目录 什么是Java虚拟机&#xff1f; 虚拟机架构设计 为什么用元空间取代永久代 双亲委派机制 分代年龄为什么是15次 GC算法 如何判断一个对象可以被回收 什么是Java虚拟机&#xff1f; Java virtual machine。虚拟机&#xff0c;像真实的计算机一样&#xff0c;能够运行…

centos-stream9系统安装docker

如果之前安装过docker需要删除之前的。 for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo yum -y remove $pkg; done 安装yum-utils工具&#xff1a; dnf -y install yum-utils dnf-plugins-core 设置存储库&…

数据库安全-redisCouchdb

1.redis未授权访问 默认端口:6379 1.1 Redis沙盒逃逸漏洞RCE-CVE-2022-0543 介绍&#xff1a;Redis 是一套开源的使用 ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值存储数据库&#xff0c;并提供多种语言的API。Redis 如果在没有开启认证的情况下&#xff0c;…