springboot3集成MQTT 发送信息和接收信息

介绍:本文章主要是针对springboot3集成MQTT发送信息和接收信息的简单操作

一、什么是MQTT

  1. MQTT(Message Queuing Telemetry Transport, 消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上。
  2. MQTT最大优点在于,可以以极少的代码和有限的带宽,为远程连接设备提过实时可靠的消息服务,作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用
  3. MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,列如:水位传感器,无人机,医疗设备、智能家居等都在使用MQTT。

 二、那如何使用springboot集成MQTT实时接收发送信息。

 1、我们先导入mqtt版本相关依赖。

<!-- MQTT  spring-integration-mqtt  包含了 org.eclipse.paho.client.mqttv3  -->
<dependency>
    <groupId>org.springframework.integration</groupId>
    <artifactId>spring-integration-mqtt</artifactId>
    <version>5.5.14</version>
</dependency>

2、在application.yml中配置好相关属性,便与后续连接地址或者是账号密码发生变化,不需要去改代码直接修改配置文件即可,由于我这边使用的是购买的mqtt服务,不是自己本地配置mqtt服务所以连接地址不一定一个模样。

# mqtt 配置
com:
  mqtt:
    url: ssl://xxxxx.xxxx.xxx-xxxxx.emqxsl.cn  // 连接地址
    clientId: mqttx_7f91ba0d // 用户id(可以随机)
    topics: test/# // 订阅的主题
    username: serverManager // 账号
    password: robsense2015 // 密码
    timeout: 10 // 连接超时时长
    keepalive: 20 // 心跳间隔 (每20秒对服务发送消息)

3.通过使用 @Configuration@ConfigurationProperties 注解,Spring Boot 会自动将配置文件中的相关属性和数据就会绑定到这个类的字段上。

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

/**
 * MQTT 客户端连接的基本配置,配置信息见 application.yml
 */

@Configuration
@ConfigurationProperties(prefix = "com.mqtt")
public class MqttConfiguration {
    private String url;
    private String clientId;
    private String topics;
    private String username;
    private String password;
    private String timeout;
    private String keepalive;

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getClientId() {
        return clientId;
    }

    public void setClientId(String clientId) {
        this.clientId = clientId;
    }

    public String getTopics() {
        return topics;
    }

    public void setTopics(String topics) {
        this.topics = topics;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String usernam
### Spring Boot 3集成 MQTT 的教程示例 #### 创建 Spring Boot 应用程序并引入依赖项 为了使应用程序能够处理 MQTT 协议消息,需在 `pom.xml` 文件中加入必要的库: ```xml <dependency> <groupId>org.springframework.integration</groupId> <artifactId>spring-integration-mqtt</artifactId> </dependency> ``` #### 配置 MQTT 连接属性 定义连接到 MQTT 经纪人的参数。这通常是在 application.properties 或者 application.yml 文件里完成。 对于 properties 文件来说: ```properties mqtt.broker.url=tcp://localhost:1883 mqtt.client.id=myClientId ``` 而对于 YAML 文件则是这样设置: ```yaml mqtt: broker: url: tcp://localhost:1883 client: id: myClientId ``` #### 编写 Java 类实现基本功能 编写主类来初始化应用上下文,并注册用于发送接收消息的通道处理器。 ```java @SpringBootApplication public class MqttIntegrationExample { public static void main(String[] args) { SpringApplication.run(MqttIntegrationExample.class, args); } @Bean public IntegrationFlow outboundFlow(Environment env) { String brokerUrl = env.getProperty("mqtt.broker.url"); String clientId = env.getProperty("mqtt.client.id"); return IntegrationFlows.from(MessageChannels.direct()) .handle(Mqtt.outboundAdapter(brokerUrl).defaultQos(2).clientIdentifier(clientId)) .get(); } } ``` 此代码片段展示了如何利用环境变量动态加载配置信息以及构建出站适配器[^1]。 另外,如果想要支持更灵活的话题管理,则可以考虑如下方式扩展入站适配器的功能[^2]: ```java @Bean @InboundChannelAdapter(channel = "mqttInput", poller = @Poller(fixedDelay = "500")) public MessageSource<String> inbound() { DefaultMqttPahoMessageDrivenChannelAdapter adapter = new DefaultMqttPahoMessageDrivenChannelAdapter( "clientId", new MqttPahoClientFactoryImpl(), "#" ); // 添加话题监听 adapter.setTopics(new TopicSubscription[]{new TopicSubscription("test/topic", 1)}); return () -> null; } // 动态增加/移除话题的方法 @Autowired private DirectFieldAccessor directFieldAccessor; public void addTopic(String topic){ List<TopicSubscription> topics = (List<TopicSubscription>)directFieldAccessor. getPropertyValue("adapter.topics"); if(topics==null || !topics.contains(topic)){ ((DefaultMqttPahoMessageDrivenChannelAdapter)adapter). setTopics(Arrays.asList(new TopicSubscription(topic,QOS))); } } public void removeTopic(String topic){ ... } ``` 上述例子说明了怎样通过编程手段调整已存在的适配器实例所关注的具体主题列表。 请注意以上给出的例子适用于较新的版本框架;而具体到 Spring Boot 3 版本可能还会有一些细微差别,建议查阅官方文档获取最准确的信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值