首页 文章详情

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

业余草 | 1511 2021-07-21 18:47 0 0 0
UniSMS (合一短信)

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

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

编辑:业余草

推荐: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。

good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter