返回顶部
首页 > 资讯 > 后端开发 > Python >Spring boot 集成 MQTT详情
  • 703
分享到

Spring boot 集成 MQTT详情

2024-04-02 19:04:59 703人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、简介二、主要特性三、集成步骤1.引入相关jar包2.核心配置类3.网关配置4.编写测试类5.yml配置信息一、简介 MQTT(Message Queuing Telemetr

一、简介

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,可以以极少的代码和有限的带宽为连接远程设备提供实时可靠的消息服务。目前在物联网、小型设备、移动应用等方面有较广泛的应用。

二、主要特性

  • (1)使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。
  • (2)对负载内容屏蔽的消息传输。
  • (3)使用tcp/IP提供网络连接。
  • (4)有三种消息发布服务质量:

“至多一次”,消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。这一种方式主要普通APP的推送,倘若你的智能设备在消息推送时未联网,推送过去没收到,再次联网也就收不到了。

“至少一次”,确保消息到达,但消息重复可能会发生。

“只有一次”,确保消息到达一次。在一些要求比较严格的计费系统中,可以使用此级别。在计费系统中,消息重复或丢失会导致不正确的结果。这种最高质量的消息发布服务还可以用于即时通讯类的APP的推送,确保用户收到且只会收到一次。

  • (5)小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量。
  • (6)使用Last Will和Testament特性通知有关各方客户端异常中断的机制。

Last Will:即遗言机制,用于通知同一主题下的其他设备发送遗言的设备已经断开了连接。

Testament:遗嘱机制,功能类似于Last Will。

三、集成步骤

1.引入相关jar包

  <dependency>
    <groupId>org.springframework.integration</groupId>
    <artifactId>spring-integration-stream</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.integration</groupId>
   <artifactId>spring-integration-mQtt</artifactId>
</dependency>  

2.核心配置类

@Configuration
public class MqttConfig
{
    @Autowired
    private MqttProperties mqttProperties;
    
    @Bean
    public MqttConnectOptions getMqttConnectOptions()
    {
        MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();
        // 设置是否清空session,false表示服务器会保留客户端的连接记录,true表示每次连接到服务器都以新的身份连接
        mqttConnectOptions.setCleanSession(true);
        // 设置超时时间,默认30秒
        mqttConnectOptions.setConnectionTimeout(mqttProperties.getConnectionTimeOut());
        mqttConnectOptions.seTKEepAliveInterval(mqttProperties.getKeepAlive());
        mqttConnectOptions.setAutomaticReconnect(true);
        // 设置连接的用户名
        mqttConnectOptions.setUserName(mqttProperties.getUsername());
        // 设置连接的密码
        mqttConnectOptions.setPassword(mqttProperties.getPassword().toCharArray());
        //服务器地址
        mqttConnectOptions.setServerURIs(new String[]{mqttProperties.getUrl()});
        mqttConnectOptions.setKeepAliveInterval(2);
        return mqttConnectOptions;
    }
    
    @Bean("mqttClientFactory")
    public MqttPahoClientFactory mqttClientFactory() {
        DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
        factory.setConnectionOptions(getMqttConnectOptions());
        return factory;
    }
   
    
    
    @Bean
    @ServiceActivator(inputChannel = "mqttOutboundChannel")
    public MessageHandler mqttOutbound() {
        MqttPahoMessageHandler messageHandler = new MqttPahoMessageHandler(mqttProperties.getProducerClientId(), mqttClientFactory());
        messageHandler.setAsync(true);
        return messageHandler;
    }
    
    @Bean("mqttOutboundChannel")
    public MessageChannel mqttOutboundChannel() 
    {
        return new DirectChannel();
    }
    
    
    
    @Bean(name = "mqttInboundChannel")
    public MessageChannel mqttInboundChannel() {
      return new DirectChannel();
    }

    
    @Bean
    public MessageProducer inbound(
        @Qualifier("mqttInboundChannel") MessageChannel channel,
        @Qualifier("mqttClientFactory") MqttPahoClientFactory factory) {
      MqttPahoMessageDrivenChannelAdapter adapter = new MqttPahoMessageDrivenChannelAdapter(mqttProperties.getConsumerClientId(), factory, "test");
      adapter.setCompletionTimeout(30000);
      adapter.setConverter(new DefaultPahoMessageConverter());
      // 0 至多一次,数据可能丢失
      // 1 至少一次,数据可能重复
      // 2 只有一次,且仅有一次,最耗性能
      adapter.setQos(1);
      // 设置订阅通道
      adapter.setOutputChannel(channel);
      return adapter;
    }
}
@ConfigurationProperties("mqtt")
@Component
public class MqttProperties implements Serializable
{
    private static final long serialVersionUID = -1425980007744001158L;
    private String url;
    private String username;
    private String passWord;
    private int keepAlive;
    private int connectionTimeOut;
    private String producerClientId;
    private String producerQos;
    private String consumerClientId;
    private String consumerQos;
    private String consumerTopic;
    private int completionTimeout;
    private String defaultTopic;
    //get、set方法省略
  }

3.网关配置

@MessagingGateway(defaultRequestChannel = "mqttOutboundChannel")
public interface MqttGateway
{
   void sendToMqtt(byte[] data,@Header(MqttHeaders.TOPIC) String topic);
}

4.编写测试类

  @Autowired
  private MqttGateway mqttGateway;
  @RequestMapping("/sendTest")
  public String sendMqttTest(String msg)
  {
      mqttGateway.send("test",msg);
      return "OK";
  }

5.yml配置信息

mqtt:
  url: tcp://localhost:1883
  username: test
  password: test1234
  keep-alive: 30
  connection-timeout: 3000
  producerClientId:  test-producer
  producerQos: 1
  consumerClientId: test-consumer
  consumerQos: 1
  deafultTopic : test

到此这篇关于Spring Boot 集成 MQTT详情的文章就介绍到这了,更多相关Spring boot 集成 MQTT内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Spring boot 集成 MQTT详情

本文链接: https://lsjlt.com/news/146720.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Spring boot 集成 MQTT详情
    目录一、简介二、主要特性三、集成步骤1.引入相关jar包2.核心配置类3.网关配置4.编写测试类5.yml配置信息一、简介 MQTT(Message Queuing Telemetr...
    99+
    2024-04-02
  • Spring boot怎么集成MQTT
    这篇“Spring boot怎么集成MQTT”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spring ...
    99+
    2023-06-30
  • 详解spring boot集成RabbitMQ
    RabbitMQ作为AMQP的代表性产品,在项目中大量使用。结合现在主流的spring boot,极大简化了开发过程中所涉及到的消息通信问题。首先正确的安装RabbitMQ及运行正常。RabbitMQ需啊erlang环境,所以首先安装对应版...
    99+
    2023-05-31
    spring boot bit
  • spring boot集成sitemesh
    Sitemesh简介Sitemesh是由一个基于Web页面布局、装饰及与现存Web应用整合的框架,是一个装饰器。它能帮助我们在由大量页面工程的项目中创建一致的页面布局和外观,如一致的导航条、一致的banner、一致的版权等。SiteMesh...
    99+
    2017-06-25
    java教程 spring boot
  • Spring Boot Redis 集成配置详解
    spring Boot 熟悉后,集成一个外部扩展是一件很容易的事,集成Redis也很简单,看下面步骤配置:一、添加pom依赖 <dependency> <groupId>org.springframe...
    99+
    2023-05-31
    spring boot redis
  • 详解Spring Boot 集成Shiro和CAS
    请大家在看本文之前,先了解如下知识点: Shiro 是什么?怎么用? Cas 是什么?怎么用? 最好有spring基础首先看一下下面这张图: 第一个流程是单纯使用Shiro的流程。 第二个流程是单纯使用Cas的流程。 第三个图是Shiro集...
    99+
    2023-05-31
    springboot shiro cas
  • 详解Spring-Boot集成Spring session并存入redis
    spring Session 提供了一套用于管理用户 session 信息的API和实现。Spring Session为企业级Java应用的session管理带来了革新,使得以下的功能更加容易实现: 编写可水平扩展的原生云应用。 将se...
    99+
    2023-05-31
    spring session redis
  • Spring Cloud Gateway集成Sentinel流控详情
    目录概述快速开始添加Sentinel配置文件编写配置文件测试概述 Sentinel 支持对 Spring Cloud Gateway、Zuul 等主流的 API Gateway 进行...
    99+
    2024-04-02
  • 如何使用Spring integration在Springboot中集成Mqtt详解
    目录前言关于Spring IntergrationSpring Intergration核心组件Message(消息)Message Channel(消息管道)Message End...
    99+
    2023-02-24
    spring integration集成mqtt 集成mqtt mqtt通信
  • 详解Spring Boot集成MyBatis(注解方式)
    MyBatis是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。spring Boot是能支持快速创建Spring应用的Java框架。本文通过一个例子来学习Spring B...
    99+
    2023-05-31
    spring boot mybatis
  • 使用 Spring Boot 集成 Nacos
    使用 Spring Boot 集成 Nacos 在本篇博客中,我们将介绍如何使用 Spring Boot 框架来集成 Nacos,实现服务的注册与发现。Nacos 是一个开源的动态服务发现、配置和服务...
    99+
    2023-09-21
    spring boot java spring cloud
  • spring boot如何集成redisson
    这篇文章主要介绍了spring boot如何集成redisson的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇spring boot如何集成redisson文章都会有所收获,下面我们一起来看...
    99+
    2023-07-04
  • SpringBoot集成MQTT示例详解
    目录引言MQTT特点Apache-Apollo下载配置与启动SpringBoot2的开发添加依赖自定义配置配置MQTT发布和订阅消息发布器发送消息入口类引言 特别提醒: 文...
    99+
    2024-04-02
  • Spring Boot 条件注解详情
    目录一 @Conditional扩展注解1.1 Bean作为条件1.1.1 @ConditionalOnBean1.1.2 @ConditionalOnMissingBean1.1....
    99+
    2024-04-02
  • Spring Boot 项目集成Redis的方式详解
    集成方式 使用Jedis Jedis是Redis官方推荐的面向Java的操作Redis的客户端,是对服务端直连后进行操作。如果直接使用Jedis进行连接,多线程环境下是非线程安全的...
    99+
    2024-04-02
  • 基于spring boot 1.5.4 集成 jpa+hibernate+jdbcTemplate(详解)
    1.pom添加依赖<!-- spring data jpa,会注入tomcat jdbc pool/hibernate等 -->     <dependency> <groupId>org.sp...
    99+
    2023-05-31
    spring boot 集成
  • Spring Boot中怎么集成Redis
    本篇文章为大家展示了Spring Boot中怎么集成Redis,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。添加依赖使用像 Redis 这类的 NoSQL 数据库就必须要依赖 spring-data...
    99+
    2023-06-16
  • spring boot集成redisson的方法
    本文小编为大家详细介绍“spring boot集成redisson的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“spring boot集成redisson的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入...
    99+
    2023-06-29
  • 【Spring Boot丨(11 )】json的集成
    集成JSON 概述JacksonGsonJSON-B 主页传送门:📀 传送 概述 Spring boot 提供了三种json库的集成: GsonJacksonJSON-B 上述三种库提供了将Jav...
    99+
    2023-08-19
    spring boot json java 后端
  • Springboot集成mqtt客户端详解
    目录1. 前言2. 引入依赖3. 配置文件4. MQTT消息类5. MQTT消息接收器6. MQTT消息发送器7. 测试MQTT发送消息1. 前言 ​ 这里我们使用springboo...
    99+
    2022-11-13
    Springboot集成mqtt Springboot mqtt
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作