阿里开源工作流框架 compileflow 上手使用
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 绘制了简单的流程图
- 查看编译出的流程业务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 文件右键创建 单元测试
@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 设计插件在 2021 版本兼容性存在问题。
自动生成的单元测试代码依赖版本较低不支持 Junit5
阿里开源工作流框架 compileflow 上手使用相关推荐
- 干掉activity、flowable,阿里开源工作流引擎compileflow使用指南
你知道的越多,不知道的就越多,业余的像一棵小草! 成功路上并不拥挤,因为坚持的人不多. 编辑:业余草 推荐:https://www.xttblog.com/?p=5247 compileflow 是什 ...
- .NET 5 开源工作流框架elsa技术研究
编者注: 工作流框架 elsa 是.NET基金会下面的开源项目,2.0版本即将在3月份发布,目前正在紧锣密鼓的开发之中,2020年2月份我也介绍过推荐一个很棒的开源工作流elsa-core ,今天给大 ...
- 什么是开源工作流框架?有什么特点?
在大数据时代,开源工作流框架也成为大家提升办公效率的利器软件之一.那么,什么是开源工作流框架?又有哪些特点?作为低代码平台服务商,流辰信息有责任和义务潜心研发更多优良的软件产品,为各大中型企业提升协同 ...
- 阿里开源 GNN 框架 Graph-Learn,实现了各类可复用模型和编程接口!
近日,阿里巴巴开源了面向图神经网络(GNN)的框架Graph-Learn(GL,原AliGraph).该框架由阿里内部团队研发,面向工业场景而设计,为当下主流GNN算法提供了基础运行框架. 项目地址: ...
- 阿里开源 GNN 框架 Graph-Learn,实现了各类可复用模型和编程接口
2020-04-01 20:54:40 近日,阿里巴巴开源了面向图神经网络(GNN)的框架Graph-Learn(GL,原AliGraph).该框架由阿里内部团队研发,面向工业场景而设计,为当下主流G ...
- (4.2.40)阿里开源路由框架ARouter的源码分析
一需求背景 1 Android原生方案的不足 2 自定义路由框架的适用场景 3 对自定义路由框架的设想 二ARouter的概述 三ARouter的引入和使用 四源码分析 1 arouter-annot ...
- 开源工作流框架 workflow-core 的学习和使用
首先感谢作者能写出如此优雅的作品,作品地址:Workflow-Core 由于工作需要,需要在项目中添加工作流引擎,经过产品经理的选型,决定用这个,并且将这个任务分配给我.经过几天的研究,我在这边做一点 ...
- 阿里开源分布式框架dubbo
百度网盘下载 课程目录: 其他 05.dubbo快速学习 6课 04.dubbo分布式架构架构篇 12课 03.dubbo分布式架构高级篇 17课 02.dubbo分布式架构基础篇 19课 01.du ...
- 详解工作流框架Activiti的服务架构和组件
摘要:通过这篇文章,可以对工作流有一个基本的认识,为后续工作流框架Activiti的学习打下坚实的基础. 本文分享自华为云社区<BPMN工作流的基本概念!详解工作流框架Activiti的服务架构 ...
最新文章
- Linux13-计划任务crontab
- JavaXml教程(二)使用DOM方式解析XML文件
- jq的链式调用.end();
- java int 128 ==_为什么 Java Integer 中“128==128”为false,而”100==100“为true?
- discuz插件开发新手入门 超详细[转载]
- 一个研究生毕业以后的人生规划(ZT)
- 你电脑上「最引以为豪」的软件是什么?
- Java EE入门教程系列第二章JSP(一)——第一个JSP程序
- 飞思卡尔智能车准备篇
- PUF论文整理2:2021_A_Novel_Modeling-Attack_Resilient_Arbiter-PUF_Design
- UGUI长按按钮的实现(技能蓄力使用)
- elasticsearch6.5.4破解白金版xpack
- 29、RFM客户价值分析(有图有案例)
- SpringBoot 导出 PDF 图表(折现图、饼状图等)
- javascript弹出浏览器的三种提示框:提示信息框、确认框、输入文本框
- 电脑上与android手机文件互传
- MySQL数据库基础详细教程
- STM32 USB HID Mouse And Keyboard (guide)
- 【lnmp】require(): open_basedir restriction in effect.【百度不是万能的,关键时刻还得靠自己】
- Java实现“梭哈”游戏