背景
专注于纯内存执行,无状态的流程引擎,通过将流程文件转换生成 java 代码编译执行,简洁高效。当前是阿里业务中台交易等多个核心系统的流程引擎。compileflow能让开发人员通过流程编辑器设计自己的业务流程,将复杂的业务逻辑可视化,为业务设计人员与开发工程师架起了一座桥梁。
- compileflow github 地址:https://github.com/alibaba/compileflow
- Idea插件设计器:https://github.com/alibaba/compileflow-idea-designer
compileflow 特性
- 高性能:通过将流程文件转换生成java代码编译执行,简洁高效。
- 丰富的应用场景:在阿里巴巴中台解决方案中广泛使用,支撑了导购、交易、履约、资金等多个业务场景。
- 可集成:轻量、简洁的设计使得可以极其方便地集成到各个解决方案和业务场景中。
- 完善的插件支持:流程设计目前有IntelliJ IDEA、Eclipse插件支持,可以在流程设计中实时动态生成java代码并预览,所见即所得。
- 支持流程设计图导出svg文件和单元测试代码。
compileflow 使用
1)compileflow demo 使用示例
compileflow 官方 demo 项目中有一个 ktv 唱歌的例子,如果价格大于等于300的话打九折,否则不打折(demo源码地址:https://github.com/compileflow/compileflow-demo)。示例如下:
maven 依赖
<dependency>
<groupId>com.alibaba.compileflow</groupId>
<artifactId>compileflow</artifactId>
<version>1.2.0</version>
</dependency>
compileflow-designer 使用
compileflow-designer 是 compileflow 开放的流程设计插件,可直接在上面编辑流程文件,同时可实时动态生成java代码并预览,比较清楚看到流程内容。
另外,自动节点关联指定类方法界面如下:
流程启动
public void run() {
//code在bpm文件中定义
String code = "bpm.ktvExample";
//执行流程的入参
Map<String, Object> context = new HashMap<>();
List<String> pList = new ArrayList<>();
pList.add("wuxiang");
pList.add("yusu");
pList.add("xugong");
pList.add("fandu");
context.put("pList", pList);
try {
ProcessEngine processEngine = ProcessEngineFactory.getProcessEngine();
Map<String, Object> result = processEngine.start(code, context);
System.out.println(result.get("price"));
} catch (Exception e) {
e.printStackTrace();
}
}
2)流程引擎对比
相对于其他流程引擎,compileflow 具有以下优点:
- compileflow 极其容易上手,降低工作流学习的难度
- compileflow 专注于纯内存执行,无状态的流程引擎,更偏向于代码流程编排,即编排引擎
compileflow 标签
compileflow 原生只支持淘宝 BPM 规范,为兼容 BPMN 2.0 规范,做了一定适配,但仅支持部分 BPMN 2.0 元素,如需其他元素支持,可在原来基础上扩展。
compileflow 整体架构
compileflow 运行阶段如下:
compileflow 定义了一套协议可以解析 xml 文件,并生成 java 类,再编译成 class 文件,加载内存后反射生成对象缓存起来,等引擎需要执行指定的 xml 流程时就会调用该对象。