Actor模型在异步处理中使用广泛,尤其是scala语言中actor框架的使用。本篇主要介绍thingsboard中其自主实现的actor模型,及在数据传输中的使用。


Actor模型简介

Actor由状态(state)、行为(Behavior)和邮箱(mailBox)三部分组成

TB Actor实现

通过测试类来跟踪源码,是学习源码非常有效的方式。我们也从测试类ActorSystemTest开始跟踪actor实现的过程。首先运行测试方法test1actorsAnd100KMessages(),体验一下actor模型处理的速度。

IOT开源数据平台Thingsboard源码分析(三)-Actor模型
测试代码

模型本身用到的类比较少,下面对每个类的的功能做一个描述:

IOT开源数据平台Thingsboard源码分析(三)-Actor模型
actor模型图

与经典的Actor模型对应关系为:

Actor在TB中的应用

Actor对象

如下图所示,tb针对不同场景实现了不同的actor对象,actor对象里通过processor来处理业务逻辑。

IOT开源数据平台Thingsboard源码分析(三)-Actor模型
Actor实现类

actor与queue打通:

DefaultTbRuleEngineConsumerService在消费队列时,如果存在actorMsg,就执行ActorSystemContext.tellWithHighPriority()处理。执行流程如图:

IOT开源数据平台Thingsboard源码分析(三)-Actor模型
actor调用流程

下面分析一下AbstractConsumerService类,其在spring初始化完成后会启动线程来消费actor的队列数据,具体的实现在rule-engine中分析。

IOT开源数据平台Thingsboard源码分析(三)-Actor模型
启动consumer

Actor模型使用的优点

tb是使用actor模型处理接收到的message,有效的隔离了消息的接收和处理过程。并且actor对消息处理的过程进行了隔离,不用考虑资源的并发处理问题。Mailbox中的actor对象处理消息的速度是非常快的,处理完后直接tell给下游childActor。

参考:

本文章来源于互联网,如有侵权,请联系删除!原文地址:IOT开源数据平台Thingsboard源码分析(三)-Actor模型

相关推荐: Mysql 并发量大、数据量大的互联网业务数据库设计军规

一、基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务、行级锁、并发性能更好、CPU及内存缓存页优化使得资源利用率更高 (2)新库使用utf8mb4字符集 解读:万国码,无需转码,无乱码风险,节省空间 (3)数据表、数据字段必须加入中文注释 解读:N…