大家好,我是陶朱公Boy(一个认真生活总想超越自己的程序员!)。

什么是工作流

定义:

简单点说,我认为工作流就是对业务的流程化抽象。WFMC给出了工作流参考模型如下:

写完这款工作流组件,我的发际线又高了...-LMLPHP

为什么称之为“流”,则是各个节点通过内外部驱动触发引起节点的推进,形成一个流式的状态达到业务终点。比如一次用户查看淘宝商品的费用、一次支付成功后的权益开通、一次用户注册、一次调度任务的运行等,都是可以是一个工作流。

适用场景:

关于为什么要造轮子

目前市场上比较有名的开源工作流程引擎有osworkflow、jbpm、activiti、flowable、camunda等,国内有Liteflow。(Jbpm4、Activiti、Flowable、camunda四个框架同宗同源,祖先都是Jbpm4)。

这些工作流组件功能丰富且强大,支持流程可视化、业务流程可编排、状态持久化和自动重试等。

但我们前期需求实在太简单了,只需要用到业务可编排能力,其他能力暂时用不上。经过综合考虑之后决定还是自己简单的实现一个,也方便将来的可定制化。

架构设计

▲功能说明

写完这款工作流组件,我的发际线又高了...-LMLPHP

写完这款工作流组件,我的发际线又高了...-LMLPHP

▲业务架构

写完这款工作流组件,我的发际线又高了...-LMLPHP

▲类图

写完这款工作流组件,我的发际线又高了...-LMLPHP

时序图

写完这款工作流组件,我的发际线又高了...-LMLPHP

▲ER图

写完这款工作流组件,我的发际线又高了...-LMLPHP

整个ER图细分为:

flow_config

flow_node_config

flow_node_chain_config

flow_node_process

flow_node_process_log

这五张表(XXconfig结尾的表是后台配置表,需要提前定义)。

写完这款工作流组件,我的发际线又高了...-LMLPHP

flow_node_process:流程运行时表。这张表也很重要它表达的是某一次具体的业务流程单(请求的时候必须传递一个唯一的流程单号的入参,代办某个具体的流程申请)的运行态数据(申请状态,流程状态)。

通过这些状态能知道某流程单号实际的运行情况(运行到具体哪个节点了,下一个待执行的节点是什么)等。流程的寻址是需要根据此表的数据来进行下去。

flow_node_process_log:这张表顾名思义是日志表,每一个流程单的运行经过各个节点,运行完后(无论成功或失败)最终都会落一条日志记录数据。

▲关于开源:

组件作者还在整理中,先贴下github地址:https://github.com/TaoZhuGongBoy/easyFlowable。(会在近期完全开放,敬请期待)

总结

02-11 11:13