一、前言
在物联网(IoT)应用中,设备之间的实时通信至关重要。而 MQTT(Message Queuing Telemetry Transport) 是一种轻量级、高效的发布/订阅协议,非常适合用于物联网场景中的消息传输。
本文将带你一步步使用 Spring Boot + Paho-MQTT 实现一个简单的 MQTT 客户端,包括连接、订阅和发布消息的功能。
二、 技术栈🧰
- Spring Boot 3.* 以上
- Java 17+
- Maven 构建工具
- MQTT Broker(例如 EMQX、Mosquitto)
- Paho-MQTT(Java 客户端库)
三、快速开始
- IDEA新建一个空的Springboot项目,然后添加或修改如下
1、添加依赖
1 | <properties> |
2、application.yml
- 为了支持多个MQTT服务地址,使用如下配置:
1 | spring: |
3、对应的配置类
- 根据yml生成对应的配置类:
MqttClientProperties
1 | import lombok.Data; |
4、管理类
- 为了方便管理MQTT客户端,我们新建一个:
MqttClientManager
来管理
构造函数:
1 |
|
initializeClientsWithRetry方法
- 这个方法主要是初始化MQTT客户端并当连接失败时进行重试
1 | private void initializeClientsWithRetry(int maxRetries) { |
- 代码很简单,主要看
setupClientCallback
客户端回调相关
setupClientCallback
1 | private void setupClientCallback(MqttClient client, String clientName, List<MqttClientProperties.TopicConfig> topics) { |
- 1、
connectComplete
主要是连接完成之后,首次配置主题订阅,和重连后重新配置主题 - 2、
messageArrived()
监听收到消息,对消息进行解析处理,这个根据自己业务处理就行 - 订阅主题方法
subscribeTopics
如下:
subscribeTopics
1 | private void subscribeTopics(MqttClient client, String name, List<MqttClientProperties.TopicConfig> topics) { |
- resubscribeTopics和subscribeTopics 逻辑是一样的,抽2个方法是为了重连时可能有其他操作要处理
- 如上的这些方法是初始化客户端并监听订阅主题的
- 如果要发送消息,我们还需要添加发布消息的方法,如下:
publish
1 | /** |
- 这样,我们发布和订阅的方法都有了
- 为了服务的健壮性,我们再加一个方法
checkConnections
去检查客户端,断开就重新连接
checkConnections
1 |
|
- 有上面这些方法,我们的这个demo算是齐全了,接下来就是测试了
5、使用与测试
- 如何使用
MqttClientManager
呢?我们可以新建一个接口
1 |
|
- 测试结果如下图:
请求发送接口
控制台收到消息
使用mqttx客户端发送消息,也可以收到
四、总结与展望
文本总结:
- 本文围绕 Spring Boot 如何集成 MQTT 协议进行了详细的讲解,从环境搭建、依赖引入、配置管理到客户端连接、消息订阅与发布,逐步引导读者实现一个完整的 MQTT 客户端通信模块。我们通过 MqttClientManager 类实现了对多个客户端的统一管理,并结合 Spring Boot 的事件监听机制和定时任务,确保了系统的稳定性与健壮性。
完整的代码
写在最后
随着物联网技术的不断发展,设备之间的通信变得越来越复杂,而 MQTT 凭借其轻量、高效、可靠的特点,成为 IoT 场景中的首选协议之一。Spring Boot 作为一个强大的后端开发框架,为快速构建 MQTT 客户端提供了良好的支持。
希望本文能够帮助你快速掌握 Spring Boot 集成 MQTT 的核心方法,并为你后续开发更复杂的物联网系统打下坚实基础。如果你喜欢这种风格的技术实践文章,也欢迎继续关注我后续关于 IoT、微服务通信、边缘计算等相关内容的分享!