大家好,我是陶朱公Boy(一个认真生活总想超越自己的程序员!)。
什么是工作流
定义:
简单点说,我认为工作流就是对业务的流程化抽象。WFMC给出了工作流参考模型如下:
为什么称之为“流”,则是各个节点通过内外部驱动触发引起节点的推进,形成一个流式的状态达到业务终点。比如一次用户查看淘宝商品的费用、一次支付成功后的权益开通、一次用户注册、一次调度任务的运行等,都是可以是一个工作流。
适用场景:
关于为什么要造轮子
目前市场上比较有名的开源工作流程引擎有osworkflow、jbpm、activiti、flowable、camunda等,国内有Liteflow。(Jbpm4、Activiti、Flowable、camunda四个框架同宗同源,祖先都是Jbpm4)。
这些工作流组件功能丰富且强大,支持流程可视化、业务流程可编排、状态持久化和自动重试等。
但我们前期需求实在太简单了,只需要用到业务可编排能力,其他能力暂时用不上。经过综合考虑之后决定还是自己简单的实现一个,也方便将来的可定制化。
架构设计
▲功能说明
▲业务架构
▲类图
▲时序图
▲ER图
整个ER图细分为:
flow_config
flow_node_config
flow_node_chain_config
flow_node_process
flow_node_process_log
这五张表(XXconfig结尾的表是后台配置表,需要提前定义)。
flow_node_process:流程运行时表。这张表也很重要它表达的是某一次具体的业务流程单(请求的时候必须传递一个唯一的流程单号的入参,代办某个具体的流程申请)的运行态数据(申请状态,流程状态)。
通过这些状态能知道某流程单号实际的运行情况(运行到具体哪个节点了,下一个待执行的节点是什么)等。流程的寻址是需要根据此表的数据来进行下去。
flow_node_process_log:这张表顾名思义是日志表,每一个流程单的运行经过各个节点,运行完后(无论成功或失败)最终都会落一条日志记录数据。
▲关于开源:
组件作者还在整理中,先贴下github地址:https://github.com/TaoZhuGongBoy/easyFlowable。(会在近期完全开放,敬请期待)