话不多说,最下面给出架构的UML图
如果对流程引擎有过简单了解的人,其实看着UML图就可以大体的写个简单的引擎Demo,当然还有很多的细节没有补充,比如触发事件,同步异步策略,以及数据库交互,环节和流程状态,主键策略和并发控制,xml解析。
下面的UML可以帮助大家多流程引擎的整体架构有清晰的了解。
下面给出我个人的分析。
1.基于spring的事件总线,多百度几篇博客其实可以用java自带的事件监听来实现,本质就是观察者设计模式。这样每次publish一个事件,对应的事件监听器就可以听到然后执行相应的逻辑
2.核心是流程引擎,无论事件还是service都需要注入引擎才可以驱动。从引擎的类中可以看到引擎有所有service的成员属性,其实是个多态的虚指针。这样只要每个service或者事件拿到引擎后就可以执行任何自己所需的服务,来完成自身的代码。就像操作系统一样,操作系统本身什么都可以干,但是对外封装了进程管理服务,内存管理,文和设备件管理服务。
3.值得注意的是,流程实例刚开始创建后,会立马创建和执行流程开始环节。环节开始后会执行工作项,然后发布环节结束。环节结束监听器监听到会根据本次环节决定走向,若为结束环节,则流程结束,若为普通环节则发布下一环节创建事件。流程结束需要根据是否是子流程,子流程的同步异步策略决定走向,若为子流程且是同步策略,则发布环节结束策略。因为子流程在源码里是作为一个特殊的环节种类。
注:流程引擎UML图会持续更新(https://www.processon.com/view/link/5d562be6e4b0d7807700a922)