万字+28张图带你探秘小而美的规则引擎框架LiteFlow(三)
三、LiteFlow核心组件讲解
讲解核心组件的时候如果有什么不是太明白的,可以继续往下看,后面会有源码解析。
下图为LiteFlow整体架构图
1)Parser
这个组件的作用就是用来解析流程配置的规则,也就是将你配置的规则文件解析成Java代码来运行。支持的文件格式有xml、json、yaml,其实不论是什么格式,只是形式的不同,用户可根据自身配置的习惯来选择规则文件的格式。
同时,规则文件的存储目前官方支持基于zk或者本地文件的形式,同时也支持自定义的形式。
对于xml来说,Parser会将<node/>标签解析成Node对象,将<chain/>解析成Chain对象,将<chain/>内部的比如<when/>、<then/>等标签都会解析成Condition对象。
如下图所示。
- Node其实就是代表了你具体业务执行的节点,就是真正的业务是在Node中执行的
- Condition可以理解为一种条件,比如前置条件,后置条件,里面一个Condition可以包含许多需要执行的Node
- Chain可以理解成整个业务执行的流程,按照一定的顺序来执行Condition中的Node也就是业务节点
Condition和Node的关系
Condition分为以下几种
- PreCondition:在整个业务执行前执行,就是前置的作用
- ThenCondition:内部的Node是串行执行的
- WhenCondition:内部的Node是并行执行的
- FinallyCondition:当前面的Condition中的Node都执行完成之后,就会执行这个Condition中的Node节点
Chain和Condition的关系
Chain内部其实就是封装了一堆Condition,Chain的执行就是指从不同的Condition中拿出里面的Node来执行,首先会拿出来PreCondition中的Node节点来执行,执行完之后会执行ThenCondition和WhenCondition中的Node节点,最后执行完之后才会执行FinallyCondition中的Node节点。
2)FlowBus
这个组件主要是用来存储上一步骤解析出来的Node和Chain的
3)FlowExecutor
这个其实是用来执行上面解析出来的业务流程,从FlowBus找到需要执行的业务流程Chain,然后执行Chain,也就是按照Condition的顺序来分别执行每个Condition的Node,也就是业务节点。
文章转自公众号:三友的java日记