百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

干掉 activity 、flowable,阿里开源流程引擎

csdh11 2025-05-23 16:23 5 浏览

compileflow 是什么

compileflow 是一个非常轻量、高性能、可集成、可扩展的流程引擎。

compileflow Process 引擎是淘宝工作流 TBBPM 引擎之一,是专注于纯内存执行,无状态的流程引擎,通过将流程文件转换生成 java 代码编译执行,简洁高效。当前是阿里业务中台交易等多个核心系统的流程引擎。

compileflow 能让开发人员通过流程编辑器设计自己的业务流程,将复杂的业务逻辑可视化,为业务设计人员与开发工程师架起了一座桥梁。

功能列表

  • 高性能:通过将流程文件转换生成 java 代码编译执行,简洁高效。
  • 丰富的应用场景:在阿里巴巴中台解决方案中广泛使用,支撑了导购、交易、履约、资金等多个业务场景。
  • 可集成:轻量、简洁的设计使得可以极其方便地集成到各个解决方案和业务场景中。
  • 完善的插件支持:流程设计目前有 IntelliJ IDEA、Eclipse 插件支持,可以在流程设计中实时动态生成 java 代码并预览,所见即所得。
  • 支持流程设计图导出 svg 文件和单元测试代码。
  • 支持基于 Java 反射和 Spring 容器的代码触发

快速上手

  • 引入 compileflow jar 依赖
<dependency>
    <groupId>com.alibaba.compileflow</groupId>
    <artifactId>compileflow</artifactId>
    <version>1.0.0</version>
</dependency>
  • 使用 compileflow 绘制了简单的流程图

IDEA 插件

  • 查看编译出的流程业务 Java 代码(以下代码为 compileflow 自动根据流程图生成的)
public class PigFlow implements ProcessInstance {

    private java.lang.Integer price = null;

    public Map<String, Object> execute(Map<String, Object> _pContext) throws Exception {
        price = (Integer)DataType.transfer(_pContext.get("price"), Integer.class);
        Map<String, Object> _pResult = new HashMap<>();
        decision8();
        //AutoTaskNode: 付款
        ((BizMock)ObjectFactory.getInstance("com.example.compileflow.bean.BizMock")).payMoney(price);
        _pResult.put("price", price);
        return _pResult;
    }

    private void decision8() {
        //DecisionNode: 计算费用
        bizMockCalMoney();
        if (price>=100) {
            //超过100
            {
                //ScriptTaskNode: 春哥请客 腿打折
                IExpressContext<String, Object> nfScriptContext = new DefaultContext<>();
                nfScriptContext.put("price", price);
                price = (java.lang.Integer)ScriptExecutorProvider.getInstance().getScriptExecutor("QL").execute("price*2", nfScriptContext);
            }
        } else {
            //不超过100
            {
                //ScriptTaskNode: 冷冷请客 打5折
                IExpressContext<String, Object> nfScriptContext = new DefaultContext<>();
                nfScriptContext.put("price", price);
                price = (java.lang.Integer)ScriptExecutorProvider.getInstance().getScriptExecutor("QL").execute("(round(price*0.5,0)).intValue()", nfScriptContext);
            }
        }
    }

    private void bizMockCalMoney() {
        price = ((BizMock)ObjectFactory.getInstance("com.example.compileflow.bean.BizMock")).calMoney(price);
    }

}
  • 在设计好的 bpm 文件右键创建 单元测试

bpm单元测试

@Test
public void testProcess() throws Exception {
    String code = "pig";
    ProcessEngine<TbbpmModel> engine = ProcessEngineFactory.getProcessEngine();
    System.out.println(engine.getJavaCode(code));
    Map<String, Object> context = new HashMap<>();
    context.put("price", 10);

    Map<String, Object> execute = engine.execute(code, context);

    System.out.println(execute);
}
  • 执行流程单元测试,输出目标过程
假装在计算金额~~~~~~10
支付了~~~~~~5

总结

  • compileflow 极其容易上手,降低工作流学习的难度。
  • compileflow IDEA 设计插件[1]在 2021 版本兼容性存在问题。
  • 自动生成的单元测试代码依赖版本较低不支持 Junit5

相关推荐

跨越26年的宝可梦系列游戏你玩过几款?

作为一个宝可梦IP的忠实爱好者,是时时刻刻关注着宝可梦的影视及游戏方面,在22年2月也即将引来正统续作宝可梦阿尔宙斯(其实还是更习惯口袋妖怪的翻译)宝可梦从1996年诞生至今一共有多少正统系列,小编做...

ndsi,肩键L键失灵,拆开看看能不能修

很久没有玩nds了,新买了个R4烧录卡是带64g的游戏来玩玩,发现肩键L失灵了,打开看看能不能挽救一下。之前后盖上是有痛贴的,没办法只能忍痛撕下来了,撕下来之后还真白啊,上保护贴是真有必要的。话不多说...

R4卡使用方法!游戏介绍及常见问题!任天堂掌机通用

哈喽大家好!我是掌机百科!今天介绍下R4卡的使用方法及教程,DS,NDS,NDSL,NDSLL,NDSXL,NDSI.NDSILL,NDSIXL,3DS,3DSLL,3DSXL,2DS,NEW3DS...

JavaScript简介:从概念、特点、组成和用法全面带你快速了解JS

“这里是云端源想IT,帮你轻松学IT”...

FileBrowser 是一个优秀的基于 Web 的文件管理器

FileBrowser是一个基于网页的文件管理器,允许用户通过浏览器界面管理服务器上的文件和目录。它提供了一种简单直观的方式来执行文件操作,如上传、下载、删除、重命名和编辑文件,以及管理目录。以下是...

BrowserTools MCP赋能Cursor IDE:基于上下文实现浏览器无缝控制

一、项目介绍BrowserToolsMCP是基于Anthropic的ModelContextProtocol(MCP)构建的浏览器交互工具,通过与CursorIDE等AI编辑器深度整合,实现...

正确复制、重写别人的代码,不算抄袭

我最近在一篇文章提到,工程师应该怎样避免使用大量的库、包以及其他依赖关系。我建议的另一种方案是,如果你没有达到重用第三方代码的阈值时,那么你就可以自己编写代码。...

它来了、全新的Vue3中文文档来了

Vue.js-渐进式JavaScript框架|Vue.jsPlayicon...

“我们太乙变化大”——第一书记讲述贫困村变化

来源:江西日报-江西新闻客户端江西新闻客户端讯(江西日报记者唐燕)“2018年1月,组织安排我到太乙村开展帮扶工作。两年来,我亲眼目睹并亲身经历了群众生产生活发生的巨大变化。看到群众生活越来越幸福,我...

趋势科技杀软曝密码漏洞:允许远程代码执行

IT之家讯来自谷歌的安全研究员TavisOrmandy最近很忙。几周之前,他发现了AVG杀软扩展程序可以绕过Chrome商店中的审查机制,自动安装到用户的Chrome浏览器中,而且这个扩展还会泄露...

Vue3安装使用方式详解

对于开发和学习任何一门新技术,新框架,最主要的还是能够运行起来,怎么运行起来,这才是最主要的。所以,我们来说一下Vue.js的安装方式。因为Vue.js的设计初始,就是一个渐进式的J...

设置 Cursor MCP 与 BrowserTools 服务

一、安装Chrome扩展打开Chrome网上应用店,搜索...

那些通用清除软件不曾注意的秘密

系统清理就像卫生检查前的大扫除,即使你使出吃奶的劲儿把一切可能的地方都打扫过,还会留下边边角角的遗漏。随着大家电脑安全意识的提高,越来越多的朋友开始关注自己的电脑安全,也知道安装360系列软件来"武装...

SharpBrowser:用C#打造超快的个性化开源浏览器!

推荐一个基于.Net8和CefSharp开发的开源浏览器。项目简介SharpBrowser是一个用C#和CefSharp开发的全功能网页浏览器。它声称是最快的开源C#网页浏览器,渲...

微软发布轻量级 VS Code 工具,可完全在浏览器中运行

...