Spring Boot 如何集成 MQTT,实现基于 MQTT 协议的消息传递?

简介: Spring Boot 如何集成 MQTT,实现基于 MQTT 协议的消息传递?

MQTT(Message Queuing Telemetry Transport)是一种轻量级的通信协议,在物联网和消息传递系统中广泛应用。而 Spring Boot 是一个开源的 Java 框架,简化了基于 Spring 的应用程序的开发流程。本文将详细介绍 Spring Boot 如何集成 MQTT,实现基于 MQTT 协议的消息传递。

什么是 Spring Boot

Spring Boot 是由 Pivotal 团队开发的用于简化 Spring 应用程序开发的框架。它提供了自动配置和约定优于配置的原则,使得开发者可以快速构建独立的、生产级别的 Spring 应用程序。Spring Boot 集成了大量常用的第三方库和组件,提供了良好的开发体验和高度可扩展性。

为什么需要集成 MQTT

MQTT 是一种轻量级的、可靠的消息传递协议,特别适用于物联网和分布式系统中的设备间通信。将 MQTT 集成到 Spring Boot 应用中,可以实现异步、实时的消息传递,使得应用程序更具弹性和灵活性。通过 MQTT,可以实现设备间的数据传输、事件通知以及远程控制等功能。

集成 MQTT 的步骤

下面是将 MQTT 集成到 Spring Boot 的基本步骤:

1. 添加 MQTT 依赖

首先,在项目的 Maven 或 Gradle 配置文件中,添加 MQTT 相关的依赖。可以使用 Eclipse Paho 提供的 MQTT 客户端库,也可以选择其他优质的第三方 MQTT 客户端库。例如,使用 Eclipse Paho 的 Maven 依赖配置如下:

<dependency>
    <groupId>org.eclipse.paho</groupId>
    <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
    <version>1.2.5</version>
</dependency>

2. 创建 MQTT 客户端

在 Spring Boot 应用程序中,创建一个 MQTT 客户端类,用于连接到 MQTT 代理并处理消息。可以使用 Eclipse Paho 提供的 MqttClient 类,根据需要自定义该类的行为。例如:

@Component
public class MyMqttClient {
   
   
    private MqttClient client;

    @PostConstruct
    public void init() {
   
   
        String broker = "tcp://localhost:1883";
        String clientId = "my-client-id";

        try {
   
   
            client = new MqttClient(broker, clientId);
        } catch (MqttException e) {
   
   
            e.printStackTrace();
        }
    }

    // 处理收到的消息
    public void handleMessage(String topic, String message) {
   
   
        // 处理逻辑
    }

    // 发布消息
    public void publishMessage(String topic, String message) {
   
   
        try {
   
   
            client.publish(topic, message.getBytes(), 2, false);
        } catch (MqttException e) {
   
   
            e.printStackTrace();
        }
    }
}

3. 配置 MQTT 连接属性

在 Spring Boot 的配置文件中,添加 MQTT 连接相关的属性。这些属性包括代理地址、客户端 ID、用户名、密码等。例如,在 application.properties 文件中配置:

mqtt.broker=tcp://localhost:1883
mqtt.clientId=my-client-id
mqtt.username=
mqtt.password=

4. 创建 MQTT 消息订阅器

在 Spring Boot 应用程序中,创建一个 MQTT 消息订阅器,用于订阅感兴趣的主题,并将收到的消息交给对应的处理器进行处理。可以使用 Spring Integration 的 MQTT 支持,或者自定义订阅器。例如,使用 Spring Integration 的配置代码如下:

@Configuration
@EnableIntegration
public class MqttSubcriberConfig {
   
   

    @Autowired
    private MyMqttClient mqttClient;

    @Bean
    public MessageChannel mqttInputChannel() {
   
   
        return new DirectChannel();
    }

    @Bean
    public MessageProducer inbound() {
   
   
        MqttPahoMessageDrivenChannelAdapter adapter =
                new MqttPahoMessageDrivenChannelAdapter(
                        "tcp://localhost:1883",
                        "my-client-id",
                        "topic1", "topic2"); // 订阅的主题

        adapter.setCompletionTimeout(5000);
        adapter.setConverter(new DefaultPahoMessageConverter());
        adapter.setQos(2);
        adapter.setOutputChannel(mqttInputChannel());

        return adapter;
    }

    @ServiceActivator(inputChannel = "mqttInputChannel")
    public void handleMessage(Message<String> message) {
   
   
        String topic = (String) message.getHeaders().get("mqtt_receivedTopic");
        String payload = message.getPayload();

        mqttClient.handleMessage(topic, payload);
    }
}

5. 使用 MQTT 客户端

在应用程序的其他组件中,可以使用之前创建的 MQTT 客户端类来发布消息或处理收到的消息。例如:

@RestController
public class MyController {
   
   

    @Autowired
    private MyMqttClient mqttClient;

    @GetMapping("/publish")
    public void publishMessage() {
   
   
        mqttClient.publishMessage("topic1", "Hello, MQTT!");
    }
}

总结

本文详细介绍了如何将 MQTT 集成到 Spring Boot 应用程序中。首先,添加 MQTT 依赖;然后,创建 MQTT 客户端类,并配置 MQTT 连接属性;接着,创建 MQTT 消息订阅器,并将收到的消息交给对应的处理器进行处理;最后,可以在应用程序的其他组件中使用 MQTT 客户端来发布消息或处理收到的消息。

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
23天前
|
监控 Java Nacos
使用Spring Boot集成Nacos
通过上述步骤,Spring Boot应用可以成功集成Nacos,利用Nacos的服务发现和配置管理功能来提升微服务架构的灵活性和可维护性。通过这种集成,开发者可以更高效地管理和部署微服务。
141 17
|
25天前
|
缓存 安全 Java
Spring Boot 3 集成 Spring Security + JWT
本文详细介绍了如何使用Spring Boot 3和Spring Security集成JWT,实现前后端分离的安全认证概述了从入门到引入数据库,再到使用JWT的完整流程。列举了项目中用到的关键依赖,如MyBatis-Plus、Hutool等。简要提及了系统配置表、部门表、字典表等表结构。使用Hutool-jwt工具类进行JWT校验。配置忽略路径、禁用CSRF、添加JWT校验过滤器等。实现登录接口,返回token等信息。
239 12
|
24天前
|
人工智能 安全 Dubbo
Spring AI 智能体通过 MCP 集成本地文件数据
MCP 作为一款开放协议,直接规范了应用程序如何向 LLM 提供上下文。MCP 就像是面向 AI 应用程序的 USB-C 端口,正如 USB-C 提供了一种将设备连接到各种外围设备和配件的标准化方式一样,MCP 提供了一个将 AI 模型连接到不同数据源和工具的标准化方法。
|
1月前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
73 8
|
2月前
|
XML Java API
Spring Boot集成MinIO
本文介绍了如何在Spring Boot项目中集成MinIO,一个高性能的分布式对象存储服务。主要步骤包括:引入MinIO依赖、配置MinIO属性、创建MinIO配置类和服务类、使用服务类实现文件上传和下载功能,以及运行应用进行测试。通过这些步骤,可以轻松地在项目中使用MinIO的对象存储功能。
118 5
|
3月前
|
消息中间件 Java Kafka
什么是Apache Kafka?如何将其与Spring Boot集成?
什么是Apache Kafka?如何将其与Spring Boot集成?
102 5
|
4月前
|
消息中间件 JSON Java
开发者如何使用轻量消息队列MNS
【10月更文挑战第19天】开发者如何使用轻量消息队列MNS
266 11
|
4月前
|
消息中间件 安全 Java
云消息队列RabbitMQ实践解决方案评测
一文带你详细了解云消息队列RabbitMQ实践的解决方案优与劣
126 10
|
3月前
|
消息中间件 存储 Kafka
MQ 消息队列核心原理,12 条最全面总结!
本文总结了消息队列的12个核心原理,涵盖消息顺序性、ACK机制、持久化及高可用性等内容。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
|
4月前
|
消息中间件
解决方案 | 云消息队列RabbitMQ实践获奖名单公布!
云消息队列RabbitMQ实践获奖名单公布!