Spring Boot整合MQTT

devtools/2025/2/8 9:11:08/

MQTT是基于代理的轻量级的消息发布订阅传输协议。

1、下载安装代理

进入mosquitto下载地址:Download | Eclipse Mosquitto,进行下载,以win版本为例

下载完成后,在本地文件夹找到下载的代理安装文件

使用管理员身份打开安装

安装时选择自己的安装地址,其他不需要修改,直到安装结束

安装完成后需要做一下修改,进入安装路径

找到该配置文件,修改端口号,修改用户名密码

pwfile.example文件就在当前安装路径下,需要进行配置绝对路径

以管理员身份打开CMD,并切换到d:/mosquitto目录下,运行以下命令添加用户名和密码:

mosquitto_passwd.exe -c D:\softwork\mqtt\mosquitto\pwfile.example admin

提示连续两次输入密码、创建成功。命令解释: -c 创建一个用户、D:\softwork\mqtt\mosquitto\pwfile.example 是将用户创建到 pwfile.example 文件中、admin 是用户名。

修改用户名密码后mosquitto需要重启生效,可以在服务里面找到该服务重启

2、创建Spring Boot项目

2.1、pom.xml文件中引入依赖

<!-- MQTT 客户端依赖 -->
<dependency><groupId>org.eclipse.paho</groupId><artifactId>org.eclipse.paho.client.mqttv3</artifactId><version>1.2.5</version>
</dependency>

2.2、application.properties配置文件添加MQTT配置

# MQTT 配置
mqtt.broker=tcp://127.0.0.1:7788
mqtt.clientId=spring-boot-client
mqtt.username=admin
mqtt.password=admin
mqtt.topic=sensor
mqtt.qos=1
mqtt.cleanSession=true

2.3、创建消息发布类

package com.mqtt.mqttproject.service;import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;/*** @ Author : Gridsum* @ Description :*/
@Service
public class MqttPublisher {@Autowiredprivate MqttClient mqttClient;@Value("${mqtt.topic}")private String topic;@Value("${mqtt.qos}")private int qos;public void publish(String message) throws MqttException {MqttMessage mqttMessage = new MqttMessage(message.getBytes());mqttMessage.setQos(qos);mqttClient.publish(topic, mqttMessage);}
}

2.4、创建消息订阅类

package com.mqtt.mqttproject.service;import org.eclipse.paho.client.mqttv3.IMqttMessageListener;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;import javax.annotation.PostConstruct;/*** @ Author : Gridsum* @ Description :*/
@Service
public class MqttSubscriber {@Autowiredprivate MqttClient mqttClient;@Value("${mqtt.topic}")private String topic;@Value("${mqtt.qos}")private int qos;@PostConstructpublic void subscribe() throws MqttException {mqttClient.subscribe(topic, qos, new IMqttMessageListener() {@Overridepublic void messageArrived(String topic, MqttMessage message) throws Exception {System.out.println("Received message: " + new String(message.getPayload()));}});}
}

2.5、测试消息发布

@Controller
public class BasicController {@Autowiredprivate MqttPublisher mqttPublisher;// http://127.0.0.1:8080/hello?name=lisi@RequestMapping("/hello")@ResponseBodypublic String hello(@RequestParam(name = "name", defaultValue = "unknown user") String name) {try {mqttPublisher.publish("Hello " + name + ", MQTT from Spring Boot!");} catch (MqttException e) {e.printStackTrace();}return "Hello " + name;}
}

 2.6、启动服务调用接口,发送消息,会打印收到消息


http://www.ppmy.cn/devtools/157060.html

相关文章

【第一章】 操作系统的概述

目录 零、前言 0.1 考纲内容 0.2 考情统计 0.3 考点解读 0.4 复习建议 一、操作系统的基本概念 1.1 操作系统的概念 1.1.1 电脑的诞生过程 1.1.2 操作系统的定义 1.2 操作系统的功能 1.2.1 QQ聊天引入 1.2.2 处理器管理的功能 1.2.3 存储器管理的功能 1.2.4 文件…

Linux——基础命令2

1、用户 Linux是一个多用户多任务操作系统&#xff0c;任何一个要使用系统资源的用户&#xff0c;都必须首先向系统管理员申请一个账号&#xff0c;然后以这个账号的身份进入系统。 Linux系统支持多个用户在同一时间内登陆&#xff0c;不同用户可以执行不同的任务&#xff0c…

群晖NAS如何通过WebDAV和内网穿透实现Joplin笔记远程同步

文章目录 前言1. 检查群晖Webdav 服务2. 本地局域网IP同步测试3. 群晖安装Cpolar工具4. 创建Webdav公网地址5. Joplin连接WebDav6. 固定Webdav公网地址7. 公网环境连接测试 前言 在数字化浪潮的推动下&#xff0c;笔记应用已成为我们记录生活、整理思绪的重要工具。Joplin&…

(苍穹外卖)项目结构

苍穹外卖项目结构 后端工程基于 maven 进行项目构建&#xff0c;并且进行分模块开发。 1). 用 IDEA 打开初始工程&#xff0c;了解项目的整体结构&#xff1a; 对工程的每个模块作用说明&#xff1a; 序号名称说明1sky-take-outmaven父工程&#xff0c;统一管理依赖版本&…

​PDFsam Basic是一款 免费开源的PDF分割合并工具

PDFsam Basic 是一款功能强大的 PDF 工具&#xff0c;专为满足用户对 PDF 文件的各种操作需求而设计。它能够高效地拆分、合并、提取页面、混合以及旋转 PDF 文件&#xff0c;为用户提供灵活的文档处理解决方案。 合并 PDF 文件 PDF 合并是 PDFsam Basic 最受欢迎的功能之一。…

C++中的based for 循环

文章目录 范围基 for 循环&#xff08;Range-based for Loop&#xff09;语法格式例子1. 遍历数组2. 遍历 std::vector3. 使用引用避免拷贝4. 使用常量引用 特殊用法5. 遍历 std::map 或 std::unordered_map 总结 在 C 中&#xff0c;based for 循环并不是一种标准的语法&#…

Jmeter接口自动化测试

之前我们的用例数据都是配置在HTTP请求中&#xff0c;每次需要增加&#xff0c;修改用例都需要打开JMeter重新编辑&#xff0c;当用例越来越多的时候&#xff0c;用例维护起来就越来越麻烦&#xff0c;有没有好的方法来解决这种情况呢&#xff1f;我们可以将用例的数据存放在cs…

某团面试题①—kudu读写流程

kudu 读写流程 前言 为什么会有kudu&#xff1f;先贴一个经典的图。 kudu诞生之前大数据的主要2种方式存储 静态数据 以hdfs引擎作为存储引擎&#xff0c;适用于高吞吐量的离线大数据分析场景&#xff0c;缺点是实现随机读写性能差&#xff0c;更新数据难 动态数据 以Hbase…