规则引擎

247 阅读2分钟

condition(express)-> action
condition: 采用QLExpress运行,其中表达式中的变量需要提前获取或者运行时获取,从context中传入,表达式的拆分为三部分,左值 操作符 右值,逻辑表达式就是一颗树,操作符=与或非时则还有子节点,所有的叶子节点就是可执行节点,所以执行的时候是一个递归,从叶子节点往上执行,得到最终结果。 进行了一些定制,左值和右值都可能是一个变量,所以需要提前注册这个变量,这边变量的使用范围是当前这个规则,注册变量的时候就填写了取值路径,

action:是一个赋值表达式,负责往结果的json里写数据,实际的业务动作根据resultjson处理

业务线->事件->规则组->规则

变量范围:事件唯一,外部变量可以定义从哪里获取,rpc,存储 事件中触发哪个规则组:trigger key决定,配置在规则组上面的

流程编排引擎: ASL亚马逊的状态机来实现流程的控制,配置起来就是一个json,根据json做流程控制,将业务流程抽象成一个个的节点,输入输出都是json字符串,通过jsonpath来操作这个输入输出的数据,流程节点分为:task,choice,succeed,fail,parallel[配置线程个数]。 通过节点中的startat,next,end:true作为流程运转的标识,流程的运转记录通过sdk的es异步日志采集发送到流程平台,这样就可以在应用内部执行,执行的路径可以在流程编排中台查看, 执行流程:平台注册节点——>注册流程实体 业务执行流程->sdk通过流程id获取流程实体->sdk根据流程实体执行流程->流程中的每个节点的执行

流程节点可以是平台直接定义调用外部服务,也可以调用内部节点,以resource的type来区分,brn格式。本地方法就统一实现一个接口,提前注册在内存map里,resource中有key,根据key获取对应的方法执行就行。

invoke(ctx,resource string,input string,timeout)result