SpringBoot简单集成MQTT

本文将详细介绍如何在SpringBoot应用中集成MQTT,包括导入相关依赖、配置application.yml、编写配置类、实现客户端和服务端代码,帮助开发者快速掌握这一集成过程。

SpringBoot简单集成MQTT

	记录:这两天在写MQ的东西,就顺便记录下
	注意的是mqtt不能储存数据,就算储存也是只能储存最后一条,所以当服务端断了不能及时接收数据时容易造成数据丢失,但mqtt的优点就是省流量
1.导入依赖
<!-- MQTT-jar -->
<dependency>
    <groupId>org.eclipse.paho</groupId>
    <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
    <version>1.2.0</version>
</dependency>
<dependency>
    <groupId>org.fusesource.mqtt-client</groupId>
    <artifactId>mqtt-client</artifactId>
    <version>1.14</version>
</dependency>
2.添加配置文件 application.yml
#MQTT配置信息
#MQTT-用户名
spring.mqtt.username: (账号)
#MQTT-密码
spring.mqtt.password: (密码)
#MQTT-服务器连接地址,如果有多个,用逗号隔开,如:tcp://127.0.0.1:61613,tcp://192.168.2.133:61613
spring.mqtt.url: tcp://IP:1883(端口默认1883)
#MQTT-连接服务器默认客户端ID
spring.mqtt.client.id: 1
#MQTT-消息订阅主题,实际可在调用接口时指定,如果有多个,用逗号隔开,
spring.mqtt.topic: /ksp/test
#连接超时
spring.mqtt.completionTimeout: 3000
3.编写配置类
@Component
public class MqttCofigBean {
   
   

    @Value("${spring.mqtt.username}")
    private String username;

    @Value("${spring.mqtt.password}")
    private String password;

    @Value("${spring.mqtt.url}")
    private String hostUrl;

    @Value("${spring.mqtt.client.id}")
    private String clientId;

    @Value("${spring.mqtt.topic}")
    private String msgTopic;

    @Value("${spring.mqtt.completionTimeout}")
    private int completionTimeout;//连接超时

    /**
     * 获取用户名
     * @return
     */
    public String getUsername() {
   
   
        return this.username;
    }
    /**
     * 获取密码
     * @return
     */
    public String getPassword
### 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 版本可能还会有一些细微差别,建议查阅官方文档获取最准确的信息。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值