干掉activity、flowable,阿里开源工作流引擎compileflow使用指南
你知道的越多,不知道的就越多,业余的像一棵小草!
成功路上并不拥挤,因为坚持的人不多。
编辑:业余草
推荐:https://www.xttblog.com/?p=5247
compileflow 是什么
compileflow 是一个非常轻量、高性能、可集成、可扩展的流程引擎。
compileflow Process 引擎是淘宝工作流 TBBPM 引擎之一,是专注于纯内存执行,无状态的流程引擎,通过将流程文件转换生成 java 代码编译执行,简洁高效。当前是阿里业务中台交易等多个核心系统的流程引擎。
compileflow 能让开发人员通过流程编辑器设计自己的业务流程,将复杂的业务逻辑可视化,为业务设计人员与开发工程师架起了一座桥梁。目前使用 compileflow 的人还不多,star 也比较少。但是这个项目已经迭代了好几年了。由阿里内部的流程引擎孵化而来:https://github.com/alibaba/compileflow
。
设计意图
希望为业务开发提供端至端,从设计至实现的业务流程解决方案。
提供多种流程引擎,实现从战略至商业能力,商业能力至业务流程,业务流程至系统,并最终实现业务的可视化全局架构。
设计高效的执行引擎,实现对服务的快速组合或扩展,提升 idea 至 value 的研发响应与交互速度。
主要特性
高性能:通过将流程文件转换生成 java 代码编译执行,简洁高效。
丰富的应用场景:在阿里巴巴中台解决方案中广泛使用,支撑了导购、交易、履约、资金等多个业务场景。
可集成:轻量、简洁的设计使得可以极其方便地集成到各个解决方案和业务场景中。完善的插件支持:流程设计目前有 IntelliJ IDEA、Eclipse 插件支持,可以在流程设计中实时动态生成 java 代码并预览,所见即所得。
支持流程设计图导出 svg 文件和单元测试代码。
compileflow-idea-designer 插件下载
插件下载地址:https://github.com/alibaba/compileflow-idea-designer
安装说明:请使用 IntelliJ IDEA 本地安装方法进行安装,重新启动 IntelliJ IDEA 就会生效。
使用教程
先打开 idea 新建项目,pom.xml 中加入一下配置:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.compileflow</groupId>
<artifactId>compileflow</artifactId>
<version>1.0.0-RC2</version>
</dependency>
</dependencies>
然后编写启动类,创建 main 方法。
@SpringBootApplication
public class CompileflowApplication {
public static void main(String[] args) {
SpringApplication.run(CompileflowApplication.class, args);
System.out.println("CompileflowApplication start ok!!!");
}
}
接着再创建一个 Case 类。
@Component
public class RunCase {
public void run() {
//code在bpm文件中定义
String code = "bpm.ktvExample";
//执行流程的入参
Map<String, Object> context = new HashMap<>();
List<String> pList = new ArrayList<>();
pList.add("业余草");
pList.add("涛哥");
pList.add("微信:codedq");
pList.add("周末愉快");
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();
}
}
public void run2() {
//code在bpm文件中定义
String code = "bpm.sqrt";
//执行流程的入参
Map<String, Object> context = new HashMap<>();
context.put("num", 4);
try {
ProcessEngine processEngine = ProcessEngineFactory.getProcessEngine();
Map<String, Object> result = processEngine.start(code, context);
System.out.println(result.get("numSqrt"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
然后创建一个 Controller 进行测试验证。
@RestController
public class DemoController {
@Resource
private RunCase runCase;
@RequestMapping("/say")
public String say() {
return "Hello,compileflow.";
}
@RequestMapping("/run")
public String run() {
runCase.run();
return "Run ok.";
}
@RequestMapping("/run2")
public String run2() {
runCase.run2();
return "Run ok.";
}
}
代码中的两个文件:bpm.sqrt 和 bpm.ktvExample 都可以通过 compileflow-idea-designer 插件进行设计。
设计的流程可以自动生成对应 Java 代码。
有了流程文件,我们就可以把整个 demo 跑起来了。
对工作流干兴趣的,可以快速上手起来,帮忙完善 compileflow 生态和社区。
总结
compileflow 极其容易上手,降低工作流学习的难度。
compileflow IDEA 设计插件在 2021 版本兼容性存在问题。
自动生成的单元测试代码依赖版本较低不支持 Junit5。