3、Docker搭建MQTT及Spring Boot 3.x集成MQTT
一、前言
本篇主要是围绕着两个点,1、Docker 搭建单机版本 MQTT(EMQX),2、Spring Boot 3.x 集成 MQTT(EMQX);
而且这里的 MQTT(EMQX)的搭建也只是一个简单的过程,主要 Spring Boot 的集成 MQTT 部分
二、Docker 搭建 MQTT(EMQX)
在这里暂时就不说 Docker 的安装了,如果没有安装可以去 [Docker官网](https://www.docker.com/) 看一下文档即可;
1、emqx 容器初始化
## 下载镜像
docker pull emqx/emqx:latest## 启动容器
docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8081:8081 -p 18083:18083 --network local-net emqx/emqx:latestdocker psdocker logs -f emqx## http://<你的服务器IP>:18083
## 默认用户名:username
## 默认密码:public
2、emqx 配置

2.1、emqx 默认密码登陆之后会有一个重置登录密码页面,可以自己选择是否跳过,之后就进去主界面

2.2 访问控制-客户端认证
客户端认证创建一个认证方式,这里使用的是内置数据库的方式,


下一步之后,有多种选择数据源可以选择,每一种数据源的基础新增命令都是有的,可以参考官方提供的命令进行新增即可

因为已经选择了内置数据库,这里就通过redis给举例一下 参考命令 的地方

这开始就进行客户端用的创建



到此为止,EMQX的配置基本上结束;至于其他方面配置,各位大神自己摸索吧 哈哈哈哈
三、Spring Boot 3.x 集成 MQTT(EMQX)
1、pom.xml
<!-- MQTT 连接版本 -->
<mqtt.version>6.3.4</mqtt.version><!-- EMQX -->
<!-- MQTT Client (Paho) -->
<dependency><groupId>org.springframework.integration</groupId><artifactId>spring-integration-mqtt</artifactId><version>${mqtt.version}</version>
</dependency>
2、application.yml
spring:# mqtt配置mqtt:server-uris: ["tcp://localhost:1883"]username: mqttx_user_001password: 123qwe,./clean-session: truedefault-topic: default/topic
2、MqttConfig.java
@Configuration
public class MqttConfig {// 配置MQTT连接选项,serverURIs、userName、password、cleanSession,这几个配置可以配置在application.yml文件中@Beanpublic MqttConnectOptions mqttConnectOptions() {MqttConnectOptions options = new MqttConnectOptions();options.setServerURIs(new String[]{"tcp://localhost:1883"}); // EMQX服务器地址、可以集成到application.yml中options.setUserName("mqttx_user_001"); // 如果需要身份验证、可以集成到application.yml中options.setPassword("123456".toCharArray()); // 如果需要密码、可以集成到application.yml中options.setCleanSession(true); // 是否清除会话、可以集成到application.yml中return options;}// 创建客户端工厂@Beanpublic MqttPahoClientFactory mqttClientFactory() {DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();factory.setConnectionOptions(mqttConnectOptions());return factory;}// 配置消息接收通道@Beanpublic MessageChannel mqttInputChannel() {return new DirectChannel();}// 配置MQTT入站通道适配器(订阅消息)// default-topic:默认订阅消息主题@Beanpublic MqttPahoMessageDrivenChannelAdapter inbound() {MqttPahoMessageDrivenChannelAdapter adapter =new MqttPahoMessageDrivenChannelAdapter("client-id", mqttClientFactory(),"default-topic"); // 指定订阅的主题、可以集成到application.yml中adapter.setCompletionTimeout(5000);adapter.setConverter(new DefaultPahoMessageConverter());adapter.setQos(1); // 设置QoS级别、可以集成到application.yml中adapter.setOutputChannel(mqttInputChannel()); // 指定消息通道return adapter;}// 配置处理收到的消息// 接收默认订阅消息主题@Bean@ServiceActivator(inputChannel = "mqttInputChannel")public MessageHandler handler() {return message -> {System.out.println("Received message: " + message.getPayload());};}// 配置MQTT出站通道适配器(发布消息)// default-topic:默认发布消息主题@Bean@ServiceActivator(inputChannel = "mqttOutboundChannel")public MessageHandler mqttOutbound() {MqttPahoMessageHandler messageHandler =new MqttPahoMessageHandler("client-id", mqttClientFactory());messageHandler.setAsync(true); // 异步发送、可以集成到application.yml中messageHandler.setDefaultTopic("default-topic"); // 默认发送的主题、可以集成到application.yml中return messageHandler;}// 用于发送消息的通道@Beanpublic MessageChannel mqttOutboundChannel() {return new DirectChannel();}
}
4、MqttPublisherService.java
@Slf4j
@Service
public class MqttPublisherService {/*** 发送消息的通道*/@Resourceprivate MessageChannel mqttOutboundChannel;/*** 默认主题发送消息** @param payload 消息内容*/public void defaultTopicSendMessage(String payload) {log.info("default topic, with payload: {}", payload);mqttOutboundChannel.send(MessageBuilder.withPayload(payload).build());}/*** 发送消息到指定主题** @param topic 主题* @param payload 消息内容*/public void withTopicSendMessage(String topic, String payload) {log.info("topic: {}, with payload: {}", topic, payload);mqttOutboundChannel.send(MessageBuilder.withPayload(payload).setHeader("mqtt_topic", topic).build());}
}
5、MqttPublisherController.java
@RestController
@RequestMapping("/mqtt/publisher")
public class MqttPublisherController {/*** MQTT 发布消息服务组件*/@Resourceprivate MqttPublisherService mqttPublisherService;/*** 发送消息到默认主题** @param payload 消息内容*/@PostMapping("/default/topic")public void defaultTopicSendMessage(@RequestParam String payload) {mqttPublisherService.defaultTopicSendMessage(payload);}/*** 发送消息到指定主题** @param topic 主题* @param payload 消息内容*/@PostMapping("/with/topic")public void withTopicSendMessage(@RequestParam String topic, @RequestParam String payload) {mqttPublisherService.withTopicSendMessage(topic, payload);}
}
到此为止,MQTT(EMQX)的基本集成就完成了
四、验证
如果想要验证是否集成成功,可以通过MQTT客户端

下一篇:4、Spring Boot 3.x集成MQTT(EMQX)主题动态订阅
相关文章:
3、Docker搭建MQTT及Spring Boot 3.x集成MQTT
一、前言 本篇主要是围绕着两个点,1、Docker 搭建单机版本 MQTT(EMQX),2、Spring Boot 3.x 集成 MQTT(EMQX); 而且这里的 MQTT(EMQX)的搭建也只是一个简单的过程&#x…...
六种定时任务记录
1、java自带的Timer Timer是java中自带的类。 优点:使用简单,缺点是当添加并执行多个任务时,前面任务的执行用时和异常将影响到后面任务。 Timer timer new Timer();timer.schedule(new TimerTask() {int i 0;Overridepublic void run() …...
Dos下编译环境搭建和C运行程序生成
文章目录 前言一、需要准备的Tool二、搭建步骤 前言 因为工作需要,需要搭建个Dos下的编译环境来进行Code App开发,如下记录下搭建过程。 一、需要准备的Tool 编译环境:Win10/win11 编译工具: DOSBox0.74 Turboc2.7z 二、搭建步骤 1.双击压…...
【MySQL】入门篇—SQL基础:数据查询语言(DQL):复杂的SELECT语句
在实际应用中,复杂的SELECT语句可以帮助我们从多个表中提取相关信息,进行数据分析,生成报告,甚至进行数据挖掘。 掌握复杂的SELECT语句对于数据分析师、数据库管理员和开发者来说是必不可少的技能。 应用场景: 多表查…...
Appium环境搭建、Appium连接真机
文章目录 一、安装Android SDK二、安装Appium-desktop三、安装Appium Inspector 一、安装Android SDK 首先需要安装jdk,这里就不演示安装jdk的过程了 SDK下载地址:Android SDK 下载 1、点击 Android SDK 下载 -> SKD Tools 2、选择对应的版本进行下…...
【X线源】关于滨松MCS2软件的说明
【X线源】关于滨松MCS2软件的说明 1.软件背景2.MCS2界面3.MCS2操作4.常见问题 1.软件背景 滨松为了方便客户将滨松MFX集成进自己的系统,滨松提供了MFX二次开发相关的信息和Demo代码。参考博客说明: 【X线源】关于滨松MFX二次开发demo示例简介 https://…...
【深度学习代码调试2】环境配置篇(中) -- 列出conda环境中所有env的pytorch版本
【深度学习代码调试2】环境配置篇(中) -- 列出conda环境中所有env的pytorch版本 写在最前面如何检查所有 Conda 环境中的 PyTorch 版本(并重点提示 PyTorch 1.7.1 版本)1. 列出所有 Conda 环境2. 检查每个环境中的 PyTorch 版本方…...
C语言运算符和表达式
1.C语言赋值运算符实例讲解 C 使用运算符(operator)来代表算术运算。例如,运算符可以使它两侧的值加在一起。如果您觉得术语“运算符”听起来比较奇怪,那么请您记住那些东西总得有个名称。与其被称之为“那些东西”或“数学符号”,被称之为“…...
RetinaNet 分类头和回归头的网络结构分析
RetinaNet 是由 Facebook AI Research(FAIR)在 2017 年提出的一种高效的一阶段(one-stage)目标检测算法。相比于两阶段(two-stage)方法,RetinaNet 通过引入 Focal Loss 解决了类别不平衡问题&am…...
app测试有哪些内容?广东深圳软件测试机构推荐
随着智能手机的普及,手机应用app越来越多,因此,企业为了更好的保证用户留存率,开发完app之后必须进行app测试。一个成功的app,软件测试是必不可少的一步,那么app测试需要进行哪些测试内容呢?深圳又有哪些靠…...
新乡医学院第一附属医院启动巨额医疗设备整体维保招标
鉴于项目本身金额巨大,又恰逢省委巡视组进驻期间,该项目备受瞩目,在业内和省内医疗圈引起了极大轰动。全国影响力最大、实力最强的企业全部参与其中,民营企业上海柯渡医疗、上海昆亚医疗以其创新的服务模式和高效的管理机制备受关注;央企通用技术集团凯思轩达医疗科技凭借雄厚的…...
Linux——综合实用操作
目录 IP与主机 ping命令 wget命令 curl命令 端口:设备与外界通讯交流的出入口 进程管理 Linux top命令Windows 任务管理器 磁盘信息监控 df iostat 网络状态监控 sar -n DEV命令 环境变量 上传,下载 压缩 解压tar,zipÿ…...
一个Idea:爆改 T480
爆改 T480 准备大改 T480,家里有一台闲置很久的 T480,不舍得扔,打算升级一下。看了几位up主的视频后,决定动手改造。 计划如下 网卡:加装4G网卡硬盘:更换为 1T 的 NVMe 2280 固态硬盘内存:升…...
网络编程(21)——通过beast库快速实现http服务器
目录 二十一、day21 1. 头文件和作用域重命名 2. reponse时调用的一些函数 3. http_connection a. 构造函数 b. start() c. process_request() d. create_response() e. create_post_response() f. write_response() 4. Server 5. 主函数 6. 测试 1)测…...
Logback
Logback 简介 SpringBoot 内置日志框架 用来自定义控制台日志输出样式、生成日志文件 使用 由于是内置所以不需要引入,稍加配置就可以直接使用。 内置源头查看 配置application.yml # 日志配置 logging:level:com.ruoyi: logging.levelorg.springframework: war…...
Sub - Adjacent Transformer — 对AT的有趣改进
出处:IJCAI 2024 未开源,链接貌似是:jackyue1994/Sub-Adjacent-Transformer (github.com) 贡献:1. 提出:基于 “次邻域” 及 “注意力贡献” 的注意力学习机制,以增强异常、正常的区分;2. 首次…...
『Mysql集群』Mysql高可用集群之主从复制 (一)
Mysql主从复制模式 主从复制有一主一从、主主复制、一主多从、多主一从等多种模式. 我们可以根据它们的优缺点选择适合自身企业情况的主从复制模式进行搭建 . 一主一从 主主复制 (互为主从模式): 实现Mysql多活部署 一主多从: 提高整个集群的读能力 多主一从: 提高整个集群的…...
PHP获取图片属性(size, width, 和 height)的函数
在PHP中,要获取图片的尺寸(宽度和高度),你可以使用 getimagesize() 函数。这个函数不仅返回图片的宽度和高度,还返回图片的类型和MIME类型等信息。 以下是 getimagesize() 函数的基本用法: <?php /…...
MySQL启动失败解决方案
目录 引言 一、查看/启动mysql服务的两种方式 方法一: 方法二: 二、修改mysql服务启动路径的地址 三、"my.ini"文件的使用 设置my.ini文件的路径 给出一个使用my.ini文件的小例子 引言 造成启动闪退\失败的原因我仅仅以个人查询的一下博…...
Spring Boot中使用MyBatis-Plus和MyBatis拦截器来实现对带有特定注解的字段进行AES加密。
1. 添加依赖 首先,在pom.xml文件中添加必要的依赖项: xml 深色版本 <dependencies> <!-- Spring Boot Starter Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifac…...
深入解析C++菱形继承:虚基表的内存布局与优化策略
1. 菱形继承的本质问题 我第一次遇到菱形继承问题时,正在开发一个教育管理系统。当时需要设计Assistant类继承Student和Teacher,结果发现这两个父类都有从Person继承的_age成员。这导致每个Assistant对象里存了两份_age——这就是典型的数据冗余问题。 …...
用Python和Pandas手把手教你计算股票技术指标(MA、MACD、KDJ、RSI、OBV保姆级代码)
用Python和Pandas实现股票技术指标全解析:从数据清洗到策略回测 在量化投资领域,技术指标分析是识别市场趋势、判断买卖时机的重要工具。对于刚接触Python数据分析的投资者来说,如何将教科书上的指标公式转化为可执行的代码往往是个挑战。本文…...
多维时序预测应用 Transformer-BILSTM
【Transformer-BILSTM多维时序预测】Transformer-BILSTM多变量时间序列预测,基于Transformer-BILSTM多变量输入模型。 matlab代码,2023b及其以上。 评价指标包括:R2、MAE、MSE、RMSE和MAPE等,代码质量极高,方便学习和替换数据。 参…...
从模型到服务:EasyAnimateV5 API开发完整解决方案
从模型到服务:EasyAnimateV5 API开发完整解决方案 1. 为什么需要API服务化 将AI模型封装为API服务是现代AI应用开发的关键步骤。对于EasyAnimateV5这样的图生视频模型,API化能带来多重价值: 降低使用门槛:非技术用户通过简单接…...
别再自己憋大纲了!这4款AI写作工具能自动生成逻辑严密的论文框架
别再死磕大纲了!这 4 款 AI 工具能一键生成逻辑严密、贴合学术规范的论文框架,帮你快速搞定开题与写作第一步。一、PaperRed(国内论文首选,学术专属)核心定位:全流程学术写作,大纲 初稿一站式大…...
大文件传输不再难:探索高效文件分享工具的实战指南
大文件传输不再难:探索高效文件分享工具的实战指南 【免费下载链接】aliyunpan 阿里云盘命令行客户端,支持JavaScript插件,支持同步备份功能。 项目地址: https://gitcode.com/GitHub_Trending/ali/aliyunpan 你是否经历过这样的尴尬时…...
ai赋能安装:让快马生成智能交互式mysql安装故障排查助手
AI赋能安装:让快马生成智能交互式MySQL安装故障排查助手 MySQL作为最流行的开源数据库之一,安装过程看似简单,但实际会遇到各种"坑"。新手经常被报错信息搞得一头雾水,老手也可能在特定环境下翻车。传统教程都是静态的…...
SEO_2024年最新SEO策略与趋势介绍(274 )
<h1 id"2024seo">2024年最新SEO策略与趋势介绍</h1> <p>在数字营销的大背景下,搜索引擎优化(SEO)始终是提升网站流量和品牌知名度的关键因素。2024年,随着互联网技术的不断进步,SEO策略和…...
用FFmpeg实现Android中的MediaExtractor 一
下图是整个MediaExtractor需要实现的方法和类,在后续的篇章会逐渐解释这些方法和类 下图是整个MediaExtractor需要实现的方法和类,在后续的篇章会逐渐解释这些方法和类 extractor.drawio 前提 通过 MediaExtractor启动流程 可以知道, 当系统服务加载MediaExtractor插件时,…...
BiliTools全平台高效解决方案:从新手到进阶的B站资源管理指南
BiliTools全平台高效解决方案:从新手到进阶的B站资源管理指南 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持视频、音乐、番剧、课程下载……持续更新 项目地址: https://gitcode.com/GitHub_Trending/bil…...
