我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Spring boot怎么集成MQTT

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Spring boot怎么集成MQTT

这篇“Spring boot怎么集成MQTT”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spring boot怎么集成MQTT”文章吧。

一、简介

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.核心配置类

@Configurationpublic 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")@Componentpublic 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”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Spring boot怎么集成MQTT

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Spring boot怎么集成MQTT

这篇“Spring boot怎么集成MQTT”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spring boot怎么集成MQ
2023-06-30

Spring Boot中怎么集成Redis

本篇文章为大家展示了Spring Boot中怎么集成Redis,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。添加依赖使用像 Redis 这类的 NoSQL 数据库就必须要依赖 spring-data
2023-06-16

怎么在Spring Boot中使用MQTT

这篇文章给大家分享的是有关怎么在Spring Boot中使用MQTT的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。为什么选择MQTTMQTT的定义相信很多人都能讲的头头是道,本文章也不讨论什么高大上的东西,旨在用
2023-06-14

spring boot集成sitemesh

Sitemesh简介Sitemesh是由一个基于Web页面布局、装饰及与现存Web应用整合的框架,是一个装饰器。它能帮助我们在由大量页面工程的项目中创建一致的页面布局和外观,如一致的导航条、一致的banner、一致的版权等。SiteMesh是基于Servlet
spring boot集成sitemesh
2017-06-25

Spring Boot怎么集成PageHelper使用

这篇文章主要介绍了Spring Boot怎么集成PageHelper使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Spring Boot怎么集成PageHelper使用文章都会有所收获,下面我们一起来看看吧
2023-06-30

怎么使用Spring integration在Springboot中集成Mqtt

今天小编给大家分享一下怎么使用Spring integration在Springboot中集成Mqtt的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下
2023-07-05

详解spring boot集成RabbitMQ

RabbitMQ作为AMQP的代表性产品,在项目中大量使用。结合现在主流的spring boot,极大简化了开发过程中所涉及到的消息通信问题。首先正确的安装RabbitMQ及运行正常。RabbitMQ需啊erlang环境,所以首先安装对应版
2023-05-31

spring boot如何集成redisson

这篇文章主要介绍了spring boot如何集成redisson的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇spring boot如何集成redisson文章都会有所收获,下面我们一起来看看吧。集成及注意事项
2023-07-04

Spring Boot集成Swagger2怎么构建API文档

这篇文章主要讲解了“Spring Boot集成Swagger2怎么构建API文档”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring Boot集成Swagger2怎么构建API文档”吧
2023-06-29

spring boot集成redisson的方法

本文小编为大家详细介绍“spring boot集成redisson的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“spring boot集成redisson的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧
2023-06-29

【Spring Boot丨(11 )】json的集成

集成JSON 概述JacksonGsonJSON-B 主页传送门:📀 传送 概述 Spring boot 提供了三种json库的集成: GsonJacksonJSON-B 上述三种库提供了将Jav
2023-08-19

Spring Boot Redis 集成配置详解

spring Boot 熟悉后,集成一个外部扩展是一件很容易的事,集成Redis也很简单,看下面步骤配置:一、添加pom依赖 org.springframework.boot
2023-05-31

Spring Boot集成Redis实战操作

最近在使用Spring Boot,发现其功能真是强大,可以快速的集成很多的组件功能,非常方便:今天就来介绍下,如何集成Redis。定义Redis 是一个高性能的key-value数据库。它支持存储的value类型很多,包括string(字符
2023-06-02

详解Spring Boot 集成Shiro和CAS

请大家在看本文之前,先了解如下知识点: 1、Shiro 是什么?怎么用? 2、Cas 是什么?怎么用? 3、最好有spring基础首先看一下下面这张图: 第一个流程是单纯使用Shiro的流程。 第二个流程是单纯使用Cas的流程。 第三个图是
2023-05-31

详解Spring-Boot集成Spring session并存入redis

spring Session 提供了一套用于管理用户 session 信息的API和实现。Spring Session为企业级Java应用的session管理带来了革新,使得以下的功能更加容易实现: 编写可水平扩展的原生云应用。 将se
2023-05-31

Spring Boot怎么集成JWT实现前后端认证

本文小编为大家详细介绍“Spring Boot怎么集成JWT实现前后端认证”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring Boot怎么集成JWT实现前后端认证”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知
2023-06-30

Spring Boot集成接口管理工具Knife4j怎么用

这篇文章主要讲解了“Spring Boot集成接口管理工具Knife4j怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring Boot集成接口管理工具Knife4j怎么用”吧!集
2023-06-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录