干掉activity、flowable,阿里开源工作流引擎compileflow使用指南

业余草

共 6728字,需浏览 14分钟

 · 2021-07-21

你知道的越多,不知道的就越多,业余的像一棵小草!

成功路上并不拥挤,因为坚持的人不多。

编辑:业余草

推荐: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.classargs);
        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 插件进行设计。

compileflow-idea-designer

设计的流程可以自动生成对应 Java 代码。

compileflow 代码

有了流程文件,我们就可以把整个 demo 跑起来了。

对工作流干兴趣的,可以快速上手起来,帮忙完善 compileflow 生态和社区。

总结

compileflow 极其容易上手,降低工作流学习的难度。

compileflow IDEA 设计插件在 2021 版本兼容性存在问题。

自动生成的单元测试代码依赖版本较低不支持 Junit5。

浏览 53
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报