ThingsBoard3.9.1源码分析-启动方法

        最近在整理课程,基于最新thingsboard版本3.9.1/4.0,欢迎大家点赞,收藏、关注我,提问,在评论区留言,我争取把最新、最准、最好的课程,呈现在各位亦师亦友的csdn广大读者面前。

目录

启动分析

启动服务端口

springboot项目的启动和初始化方式

系统组成

启动方法

(1)Transport

(2)Actor

(3)Rule-Engine


启动分析

查看整个项目的pom依赖项,在thingsboard-3.9.1\pom.xml文件中,如下:

<spring-boot.version>3.2.12</spring-boot.version>
<spring-data.version>3.2.12</spring-data.version>
简单且统一的方式来访问各种数据源
<spring-data-redis.version>3.2.12</spring-data-redis.version>
<spring.version>6.1.15</spring.version>
<spring-redis.version>6.2.11</spring-redis.version>
<spring-security.version>6.2.8</spring-security.version>
<jedis.version>5.1.5</jedis.version>
<jjwt.version>0.12.5</jjwt.version>
<slf4j.version>2.0.13</slf4j.version>
<log4j.version>2.23.1</log4j.version>
<logback.version>1.5.5</logback.version>
<rat.version>0.10</rat.version> <!-- unused -->
<cassandra.version>4.17.0</cassandra.version>
<metrics.version>4.2.25</metrics.version>
<cassandra-all.version>3.11.17</cassandra-all.version> <!-- tools -->
<guava.version>33.1.0-jre</guava.version>
<caffeine.version>3.1.8</caffeine.version>

启动服务端口

在windows环境下,打开cmd命令窗口,

使用netstat -ano 命令,可以看到,后台启动之后,服务端占用端口,如下:

http      8080 tcp

MQTT   1883 tcp

CoAP    5683 udp

lwM2M  5685 udp

lwM2M-security  5686 udp

lwM2M-bs  5687 udp

lwM2M-bs-security  5688 udp

websocket   8080(与http共享)

EDGE_RPC  7070 tcp

springboot项目的启动和初始化方式

一般情况下,基于springboot框架开发的项目,初始化资源的方式,大致有3

(1)Spring Bean初始化的InitializingBean,init-method和PostConstruct。

(2)Spring的事件机制(发布事件ApplicationEventPublisher,通过 @EventListener 注解或实现 ApplicationListener 接口来监听事件)。

(3)ApplicationRunner与CommandLineRunner接口。

ThingsBoard系统使用了上述1/2前两种方式

所以,简单浏览查看一下系统启动项的方法,

可以全文搜索“@PostConstruct”,

可以全文搜索“@EventListener”,“ApplicationEventPublisher”

找到各个模块的启动方法。

 

系统组成

单体架构一共包含Core、Transports、Rule-Engine和Web-ui四部分内容。

(1)Core服务

 tb-Core负责处理REST API调用和WebSocket订阅,还负责存储有关活动设备会话和监视设备连接状态。使用Actor系统实现主要实体的角色: 租户和设备。

接口包括:

ThingsboardServerApplication.java(启动类);

install服务开启相关配置、异常和调用;

exception响应错误及错误逻辑处理;

controller页面展示必要的系统数据接口;

service为controller提供支持;

config为同源策略、swagger、webSocket、消息及安全配置注册spring bean;

(2)Transports服务

基于MQTT、HTTP、CoAP和LwM2M的api,可用于设备应用程序/固件。每个协议 api都由一个单独的服务器组件提供,是 “传输层”的一部分。

一旦传输从设备接收到消息,该消息会被解析并推送到持久消息队列。

(3)Rule-Engine服务

TB规则引擎是系统的核心,负责用用户定义的逻辑和流程处理传入的消息。使用Actor系统来实现主要实体的参与者: 规则链和规则节点。规则引擎节点可以加入集群,其中每个节点负责传入消息的某些分区。

Rule Engin订阅来自队列的传入数据,并且只在处理消息后才确认该消息。有多种策略可用于控制订单或消息处理以及消息确认标准。

规则引擎可以在两种模式下运行: 共享和隔离。在共享模式下,规则引擎处理多个租户的消息。在隔离模式下,规则引擎可以配置为只处理特定租户的消息。

(4)Web-ui服务

是基于Angular+Express.js框架而编写的轻量级组件,承载静态ui内容,这些组件是完全无状态的,没有多少可用的配置。静态网页界面包含捆绑。

启动方法

对于关键模块,查看它们都是怎么启动和初始化的:

(1)Transport

        mqtt启动,参考MqttTransportService.init方法。

MqttTransportServerInitializer负责配置Netty的ChannelPipeline,包括:

MqttDecoder:解码MQTT协议消息。

MqttEncoder:编码MQTT协议消息。

MqttTransportHandler:处理MQTT连接和消息。

MQTT连接认证流程:当设备发起MQTT连接时,MqttTransportHandler会处理CONNECT消息,验证设备凭证(如Access Token)。

(2)Actor

        actor启动,参考DefaultActorService.initActorSystem方法,

DefaultActorService.initActorSystem初始化;

RootActor 初始化"子Actor"(如DeviceActor、RuleChainActor);

系统的消息流转基于TbActorMailbox和Dispatcher;

启动消费者线程,从队列(如 Kafka、RabbitMQ)拉取消息,如果消息是ActorMsg,则调用ActorSystemContext.tellWithHighPriority()投递到对应Actor。

(3)Rule-Engine

a. 启动消费者服务

DefaultTbRuleEngineConsumerService类init方法启动,如下:

b. 规则链加载

从数据库加载所有规则链(Rule Chain),并缓存到内存中,

c. 每个规则节点(Rule Node)实现 TbNode 接口,处理传入的消息

比如,TbMsgTypeSwitchNode

流程总结如下:

系统启动后自动调用DefaultTbRuleEngineConsumerService.init()。

消息队列消费者启动→监听tb_rule_engine队列。

规则链加载→从数据库加载RuleChain并缓存。

规则节点执行→处理传入的TbMsg并触发规则逻辑。

(4)Web-ui

 省略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值