|
преди 3 години | |
---|---|---|
.. | ||
assets | преди 4 години | |
nodes | преди 4 години | |
actor.go | преди 4 години | |
actor_ref.go | преди 4 години | |
actor_system.go | преди 3 години | |
cluster_service.go | преди 4 години | |
context.go | преди 4 години | |
creator.go | преди 4 години | |
dispatcher.go | преди 4 години | |
event_service.go | преди 4 години | |
mailbox.go | преди 4 години | |
msg.go | преди 4 години | |
node.go | преди 4 години | |
procee_failure_strategy.go | преди 4 години | |
readme.md | преди 4 години | |
rule_chain.go | преди 4 години | |
rule_chain_service.go | преди 3 години | |
rule_chain_test.go | преди 4 години | |
service_type.go | преди 4 години | |
tenant_service.go | преди 3 години |
规则引擎底层实现基于actor模型设计
Actor模型有两种任务调度方式:基于线程的调度、基于事件的调度
基于线程的调度 为每个Actor分配一个线程,在接收一个消息时,如果当前Actor的邮箱为空则会阻塞当前线程。基于线程的调度实现较为简单,但线程数量受到操作的限制,现在的Actor模型一般不采用这种方式。 基于事件的调度
事件可以理解为任务或消息的到来,而此时才会为Actor的任务分配线程并执行。
因此,可以把系统中所有事物都抽象成为一个Actor:
Actor的输入是接收到的消息
Actor接收到消息后处理消息中定义的任务
Actor处理完成任务后可以发送消息给其它Actor
具体的消息流转过程见下图
基于以上理论,规则引擎抽象出了4类actor AppActor
、TenantActor
、RuleChainActor
、RuleNodeActor
,除AppActor之外, 其他Actor都有初始化它的父级Actor,因此它自身的生命周期全部由父级Actor管理。