ThingsBoard3.9.1源码分析-Actor模型处理消息

Actor按照层级组织

App Actor:根Actor,负责管理所有租户Actor

Tenant Actor:管理租户下的设备和规则链Actor

Device Actor:维护设备状态(活跃会话、订阅、待处理RPC命令等)

Rule Chain Actor:处理传入消息并分发给规则节点Actor

Rule Node Actor:处理消息并将结果返回给规则链Actor

Actor消息流程图

Actor消息处理流程说明:

(1)DefaultTbRuleEngineConsumerService是处理规则引擎消息的消费者服务类。

其关键方法有:

init

onTbApplicationEvent

handleNotification

updateQueues / deleteQueues

handleComponentLifecycleEvent

createConsumer (调用TbRuleEngineQueueConsumerManager.create

removeConsumer

MainQueueConsumerManager.launchConsumer()方法,做为消费者,接收来自Transport的消息,并将消息推送到Actor系统上下文ActorSystemContext中。

(参见Mark-20250101-1)

(2)ActorSystemContext把数据发送到根Actor(AppActor)的邮箱中,AppActor从邮箱中收到消息然后通过process方法进行处理,根据消息类型,会找到对应设备的TenantActor并将消息投递到对应邮箱中。

(3)TenantActor从邮箱中取到数据并通过process方法进行处理,首先找到TenantAcotr绑定的RootChainActor,并将消息投递到RuleChainActor对应的TbActorMailbox。

(4)RuleChainActor从邮箱中取到数据之后通过process方法将消息推送给它的RuleChainActorMessageProcessor进行处理。

(5)RuleChainActorMessageProcessor接收到数据之后,会先确认有没有指定处理的node,如果没有就将其给到这个RuleChain对应的第一个RuleNodeActor进行处理。

(6)RuleNodeActor从邮箱中收到消息之后会通过process方法,将数据发到RuleNodeActorMessageProcessor进行进一步的处理。

(7)RuleNodeActorMessageProcessor会将消息丢给TbNode的实现类进行数据的最后处理。

(8)TbNode的实现类处理完之后会调用DefaultTbContext,告知处理结果,然后会根据返回结果重新拼装消息,并将消息传递回RuleChainActor。

(9)RuleChainActor接收到消息,由于消息类型发生了变更,所有会调用其对应的RuleChainActorMessageProcessor的onTellNext方法进行下一步处理。

(10)RuleChainActorMessageProcessor会根据rule node的关联关系找到下一个处理消息的RuleNodeActor;如果当没有找到则说明当前消息已经处理完毕,如果可以找到则把当前消息推送到pushToTarget()。

(11)服务下一个target的类型是RULE_NODE则将消息发送给它,如果是RULE_CHAIN则重新组装消息,并通知RuleChainActor对应的TenantActor进行处理。

(12)TenantActor收到来自RuleChainActor发来的消息之后会寻找下一个RuleChainActor来处理消息。

到此,一个完整流程结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值