lijian 2e2d398ab2 优化redis连接池的泄露问题 3 jaren geleden
..
assets e9d7d52690 更新文档 4 jaren geleden
nodes 2e2d398ab2 优化redis连接池的泄露问题 3 jaren geleden
actor.go 3a259797eb 规则引擎完善 4 jaren geleden
actor_ref.go 3a259797eb 规则引擎完善 4 jaren geleden
actor_system.go a95025c69d fix comment 3 jaren geleden
cluster_service.go dc3c079417 更新规则引擎 4 jaren geleden
context.go 7e52abcede 完成对组件生命周期的处理 4 jaren geleden
creator.go 3a259797eb 规则引擎完善 4 jaren geleden
dispatcher.go 3a259797eb 规则引擎完善 4 jaren geleden
event_service.go b188189ea6 update 4 jaren geleden
mailbox.go f65b9e7fed 修复Bug 3 jaren geleden
msg.go 3a259797eb 规则引擎完善 4 jaren geleden
node.go 3a259797eb 规则引擎完善 4 jaren geleden
procee_failure_strategy.go 3a259797eb 规则引擎完善 4 jaren geleden
readme.md e9d7d52690 更新文档 4 jaren geleden
rule_chain.go 7280967ce3 add product record id 4 jaren geleden
rule_chain_service.go a95025c69d fix comment 3 jaren geleden
rule_chain_test.go a85d0246bf fix name 4 jaren geleden
service_type.go 3a259797eb 规则引擎完善 4 jaren geleden
tenant_service.go a95025c69d fix comment 3 jaren geleden

readme.md

规则引擎设计文档

实现模型

规则引擎底层实现基于actor模型设计

Actor模型有两种任务调度方式:基于线程的调度、基于事件的调度

基于线程的调度 为每个Actor分配一个线程,在接收一个消息时,如果当前Actor的邮箱为空则会阻塞当前线程。基于线程的调度实现较为简单,但线程数量受到操作的限制,现在的Actor模型一般不采用这种方式。 基于事件的调度

事件可以理解为任务或消息的到来,而此时才会为Actor的任务分配线程并执行。

因此,可以把系统中所有事物都抽象成为一个Actor:

Actor的输入是接收到的消息

Actor接收到消息后处理消息中定义的任务

Actor处理完成任务后可以发送消息给其它Actor

actor模型原理图

avatar

内部架构部件

具体的消息流转过程见下图

avatar

基于以上理论,规则引擎抽象出了4类actor AppActorTenantActorRuleChainActorRuleNodeActor,除AppActor之外, 其他Actor都有初始化它的父级Actor,因此它自身的生命周期全部由父级Actor管理。

  • 应用actor(AppActor):负责整个规则引擎核心事件的调度,属于服务级别的actor,对外与消息中间件(内部目前实现了基于rabbitmq的消息队列)通信,对内则根据消息内的元数据,路 由到相应的租户Actor。
  • 租户Actor(TenantActor):由AppActor初始化时创建,平台上每个厂商会映射到这里的TenantActor中,AppActor初始化时会查询平台上所有的厂商并为每个厂商创建一个TenantActor, 标识为TenantId(对应平台中的VendorId),租户Actor的主要作用是起到规则链隔离,可以支持单独厂商的规则链控制。TenantActor初始化时会查询当前厂商所有启用的规则链,并创建对应的RuleChainActor。
  • 规则链Actor(RuleChainActor): 由TenantActor创建,负责管理一个规则链的行为,自身初始化时,会创建当前链上所有规则节点的Actor。同时管理规则节点Actor的生命周期。
  • 节点Actor(RuleNodeActor):由RuleChainActor创建,负责某类规则节点的消息处理。对应当前规则链上的节点。