首页 > 编程语言 >tb自带mqtt服务器源码学习

tb自带mqtt服务器源码学习

时间:2023-08-18 20:23:11浏览次数:47  
标签:连接 mqtt handler 消息 服务器 tb 源码

 tb自带的mqtt服务器,是基于netty实现的

启动类是 :MqttTransportService,启动的配置参数如下图:

 

编排处理channel中数据的handler的是 MqttTransportServerInitializer

context的isProxyEnabled默认为flase,sslHandlerProvider是null

所以处理数据的handler如下图圈中的

 

说一下四个handler的用处第一个框的类是IpFilter

主要是check和添加,check的时候结合了DefaultTransportRateLimitService类的transport.rate_limits.ip_limits_enabled:false配置,对该连接做访问频率限制,因为默认为false,所以没有做这个check。

接下来两个是decocer和encoder主要是编解码

业务上的处理主要在最后的 MqttTransportHandler

这个handler继承自ChannelInboundHandlerAdapter,处理设备上报的数据

入口在channelRead方法,调用processMqttMsg,分成了连接消息CONNECT,privision消息和一般消息

 

 

Connect消息的处理中,如果是设备首次连接,则正常建立连接,如果设备已经有连接,则会断开老连接

enqueueRegularSessionMsg方法处理一般消息,也是一般设备传上来的业务消息,消息放入queue中,异步处理

 

 

设备上报消息是mqtt的publish动作

 

 

 

根据设备类型不同,区分为gateway网关和设备,两种topic不同

 

根据topic的不同,走入不同的分支,这些分支主里工作内容都差不多:转换上报的消息,调用transportService的对应process方法

 

以第一个属性数据为例,给消息添加一些附属信息,发送到规则引擎,其他分支类似。

 

 

 

通过这几个handler 可以知道了tb接到消息后到进入规则引擎前的业务流转。

 

 

再回头看看,tb是实现了一个定制化的mqtt服务器的功能

mqtt服务器需要能连接,一个clientid只有一个链接;tb以username为唯一,也实现了一个username的连接只有一个。

mqtt服务器可以订阅和发布消息,这个在tb有很多限制

参看subscribe动作处理的方法

 

只能订阅switch分支中的符合的topic,不能随便订阅

对于回复确认都是最多一次的原则,没有重试

 

标签:连接,mqtt,handler,消息,服务器,tb,源码
From: https://www.cnblogs.com/heroinss/p/17641525.html

相关文章

  • Netty源码学习2——NioEventLoop的执行
    系列文章目录和关于我零丶引入在《Netty源码学习1——NioEventLoopGroup的初始化》中,我们学习了NioEventLoopGroup和NioEventLoop的初始化,在下面netty服务端启动的demo中会在ServerBootStrap中指定Channel为Nio类型的Channel,然后启动的时候绑定端口,之前我们解释道NioEventLoop......
  • 某电商平台电子产品用户购买行为研究-计算机毕业设计源码+LW文档
    摘要随着计算机和互联网的普及,搜索引擎成了人们常用的工具。通过搜索引擎来查询电商网站销售信息,搜索引擎首先对关键词进行分析,然后返回查询的结果。但是随着网络信息量的急速增长,产生了大量的垃圾信息和网络广告,使得查询结果越来越困难。针对这一问题,本系统通过对网络爬虫的分析......
  • IT行业招聘数据分析与岗位推荐系统-计算机毕业设计源码+LW文档
    内容摘要随着社会经济的快速发展,人们的生活水平得到了显著提高,但随之而来的社会问题也越来越多。其中最为显著的就是就业问题。为此,招聘信息的展示也变得越来越为重要。但是在大量的招聘信息中,人们在提取自己最想要的信息时变得不那么容易,对于应聘者也是如此。本系统通过对网络爬虫......
  • 基于Python的招聘网站爬虫及可视化的实现-计算机毕业设计源码+LW文档
    开发语言:Python框架:flaskPython版本:python3.7.7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:PyCharm浏览器:谷歌浏览器DROPTABLEIFEXISTSa6woc_zhaopinxinxi;/*!40101SET@saved_cs_client=@@character_set_client/;/!40101SETcharacter_set_cli......
  • 基于Redis实现关注、取关、共同关注及消息推送(含源码)
    微信公众号访问地址:基于Redis实现关注、取关、共同关注及消息推送(含源码)一、简介       实现用户之间的关注和取消关注、查询是否关注、共同关注及关注后消息采用feed方式推送及滚动分页查看效果等相关功能。利用redis里面的Set集合实现关注,取关,共同关注,消息推送等,结合Jav......
  • 金融行业招聘数据分析系统的设计与实现-计算机毕业设计源码+LW文档
    摘要随着社会经济的快速发展,人们的生活水平得到了显著提高,但随之而来的社会问题也越来越多。其中最为显著的就是就业问题。为此,招聘信息的展示也变得越来越为重要。但是在大量的招聘信息中,人们在提取自己最想要的信息时变得不那么容易,对于应聘者也是如此。本系统通过对网络爬虫的......
  • AOP源码解析:AspectJExpressionPointcutAdvisor类
    先看看AspectJExpressionPointcutAdvisor的类图再了解一下切点(Pointcut)表达式,它指定触发advice的方法,可以精确到返回参数,参数类型,方法名1packageconcert;23publicinterfacePerformance{4voidperform();5}AspectJExpressionPointcutAdvisor源码,官......
  • 直播平台源码之实现网络请求的方法
    直播平台源码开发中如果你不会网络请求,那么你开发的应用软件就是一具没有灵魂的枯骨。当你下载完软件后会要求你给与权限,否则就没办法使用,网络请求也需要对应的权限,否则就没法进行联网操作。在直播平台源码开发中首先在AndroidManifest.xml文件中添加网络请求权限要在manifest......
  • 如何在视频直播app源码开发中实现开屏广告功能
    APP开屏广告就目前来说是一个很常见的广告形式,我们现在打开各个APP几乎都会有开屏广告的身影,开屏广告也成了吸引用户注意力和实现盈利的主要方式,所以在视频直播app源码开发,开屏广告功能就显得尤为重要。一、视频直播app源码之开屏广告作用:广告、营销推广界面组成:广告、跳过(倒计......
  • 悬赏平台APP系统源码
      悬赏平台APP软件是一款在线上做任务,拉新,充场的软件,任何一个用户在平台上注册账号,发布任务,领取任务并获得佣金。本文就一悬赏任务APP软件对功能上的事项进行分析,看看都有哪些功能。  1.任务源  悬赏平台APP展示者所有的任务平台类型,任务做法流程,任务要求,有充场,拉新,......