A pluggable, scalable process engine. You can use it to develop business-process, approval-process, retry-process and so on. Hope you enjoy it! 可插拔的精简流程引擎
A pluggable, scalable process engine. You can use it to develop business-process, approval-process, retry-process and so on. Hope you enjoy it! 可插拔的精简流程引擎
Bulbasaur 读音 ['bʌlba:sɑu]
bulbasaur分为四个模块,按需加载使用。分别为:
| 模块 | 功能 |
|---|---|
核心模块 bulbasaur-core |
提供核心流程 |
持久化模块 bulbasaur-persist |
提供流程的存储和失败回滚 |
调度模块 bulbasaur-schedule |
提供失败重试,定时等调度逻辑 |
任务模块 bulbasaur-task |
提供人工任务和超时自动执行,目前已经支持单人单任务,多人单任务 |
内存的流程引擎,那么只要使用核心模块即可,流程模板以文件形式维护在业务方系统。核心模块 + 持久化模块。核心模块 + 持久化模块 + 调度模块。核心模块 + 持久化模块 + 任务模块 ,至于要不要调度模块都可以。其中,除了核心模块外,其他模块都需要业务方建表支持。
持久化模块 bulbasaur-persist 需要表:
| 表名 | 功能 |
|---|---|
xx_bulbasaur_d |
模板 |
xx_bulbasaur_p |
流程实例 |
xx_bulbasaur_s |
节点 |
调度模块bulbasaur-schedule需要表:
| 表名 | 功能 |
|---|---|
xx_bulbasaur_j |
重试/定时 任务 |
任务模块bulbasaur-task需要表:
| 表名 | 功能 |
|---|---|
xx_bulbasaur_t |
审批任务 |
xx_bulbasaur_ptp |
多人审批任务 |
以上表需要建在业务方库中,表名可以业务方指定,流程引擎可以识别,比如:业务方库中表都有统一前缀,那么流程引擎表可以都带上统一前缀。
流程引擎使用quartz做分布式调度,也需要在业务方库中建表。
注意: 建表语句文末提供
try {
//基于内存的流程
//Machine m = machineFactory.newInstance("业务唯一id","流程名称xxx");
//持久化流程
//PersistMachine m = persistMachineFactory.newInstance("业务唯一id","流程名称xxx");
//可调度流程
ScheduleMachine m = scheduleMachineFactory.newInstance("业务唯一id", "流程名称xxx");
m.addContext("goto", 2);// 可放入流程中的变量,上文中可用
m.addContext("_i", 3);// 会被持久化的流程变量,因为带了 "_" 开头
m.run();
} catch (Exception e) {
System.out.println(e);
}| 节点 | 功能 |
|---|---|
start |
特殊开始节点 |
state |
直接执行invokes内容,并根据paths中配置执行下一个节点,如果配置了多个path,则可以根据表达式判断走哪条 |
event |
先执行pre-invokes,并暂停。需要外部再次触发,继续执行invokes 。其中 pre-invokes 和invokes 按需不配置 |
task |
审批流节点,可以在节点上直接配置审批人列表,或者配置服务从业务方获取审批人列表 |
quartz流程引擎使用了quartz,通过数据库完成分布式调度。配置:quartz.xml
系统内存在的调度处理逻辑:
bulbasaurJobProcessorbulbasaurCleanerTriggerbulbasaurJobCleanerTriggerrepeatList="1m 2m 3m 2m 1m",支持分(m),小时(h)和天(d),该示例意思为:重试5次,每次间隔分别为1分钟,2分钟,3分钟...
pre-invokes 该配置,业务方可以配置bean,接收参数为string,逗号分割的taskId,业务可以处理该task,给用户发旺旺消息,邮件等审核链接。candidate-users 可配置列表,: ,分割,例如00001:测试人员,00002:初审人员。assignment-handler 配置获得处理人,业务bean返回的格式同。candidate-users,这里bulbasaur只关注id和name,业务系统自行对接hecla或uic或subaccount。其中 assignment-handler 获取的内容优先级高于candidate-users。candidate-users没有配置,并且assignment-handler返回null,则任务该任务节点不需要审核,直接往下走。timeout-handler配置超时的策略,业务bean返回给bulbasaur一个Map,key分别为:period[超时时间],outGoing[超时之后去到的节点名],ignoreWeekend[是否忽略周末]。TaskAccessor.hasTaskTakenPermissionTaskAccessor.takenTaskTaskAccessor.releaseTaskcreatedTaskAccessor.hasTaskDealPermissionTaskAccessor.completeTask(java.lang.Long, java.lang.String, User, java.lang.String)runTaskAccessor.assignTaskWithResultTaskAccessor.queryTasksByUserTaskAccessor.queryTasksTaskAccessor.queryTaskByBizIdTaskAccessor.update(java.lang.Long, java.lang.String, java.lang.String)TaskAccessor.update(java.lang.Long, java.lang.Object)taskId,全量覆盖bizInfoDDL………………quartz所需表这里的QRTZ_为表前缀,可以改成业务方统一的前缀,比如像xxxx_bulbasaur_p一样的xxxx_FIRED_TRIGGERS。
在scheduleModule中配置,如果不指定,默认为QRTZ_
…备注:
xml中,可以通过表达式循环执行一个节点
| 转义字符 | 字符 | |
|---|---|---|
| < | 大于号 | |
| & | & | 和 |
| ' | ‘ | 单引号 |
| " | " | 双引号 |
No open issues yet, or sync has not completed.