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

createh52个月前 (02-01)技术教程23

compileflow 是什么

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

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

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

功能列表

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

快速上手

  • 引入 compileflow jar 依赖

????com.alibaba.compileflow
????compileflow
????1.0.0

  • 使用 compileflow 绘制了简单的流程图

IDEA 插件

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

????private?java.lang.Integer?price?=?null;

????public?Map?execute(Map?_pContext)?throws?Exception?{
????????price?=?(Integer)DataType.transfer(_pContext.get("price"),?Integer.class);
????????Map?_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?nfScriptContext?=?new?DefaultContext<>();
????????????????nfScriptContext.put("price",?price);
????????????????price?=?(java.lang.Integer)ScriptExecutorProvider.getInstance().getScriptExecutor("QL").execute("price*2",?nfScriptContext);
????????????}
????????}?else?{
????????????//不超过100
????????????{
????????????????//ScriptTaskNode:?冷冷请客?打5折
????????????????IExpressContext?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?engine?=?ProcessEngineFactory.getProcessEngine();
????System.out.println(engine.getJavaCode(code));
????Map?context?=?new?HashMap<>();
????context.put("price",?10);

????Map?execute?=?engine.execute(code,?context);

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

总结

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

相关文章

JavaWeb开发框架,你又真正了解多少?

很久以前就想写这样的文章了,现在传统软件和互联网软件行业的兴起,让很多人都成为了程序猿,以至于现在程序猿的泛滥,水平参差不齐,很多都是懂得皮毛不懂的原理,偏离了软件开发的思想!重点摘要: 现在我们we...

JavaWeb项目实战:Tomcat服务器配置及业务功能开发全攻略

大家好,我是袁庭新。在 JavaWeb 开发的世界里,高效搭建与部署项目是每个开发者的必备技能。今天,我们将聚焦于如何运用 IDEA 完成一个基于 Maven 的 JavaWeb 项目实践。从业务功能...

Java高级工程师学习线路总结:Java Web开发

  目前,国内外信息化建设已经进入基于Web应用为核心的阶段,Java作为应用于网络的最好语言,前景无限看好。然而,就算用Java建造一个不是很烦琐的web应用,也不是件轻松的事情。那么,具备Java...

SpringBoot之旅第四篇-web开发(springboot webjars)

一、引言有了自动配置,springboot使web开发变得简单,这个在springboot之旅中的第一篇中就有体现,实际的开发中当然不会这么简单,很多时候我们都需要自己去定制一些东西。web开发的东西...

javaweb宿舍管理系统开发详细教程

本文章向大家介绍javaweb宿舍管理系统,主要包括javaweb宿舍管理系统使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。 宿舍管理是高校管理的重要组...

超详细带你从入门开始,开发一个超实用的浏览器插件

相信大家平时在电脑上逛掘金、知乎网站时,肯定有看到过下面超级烦人的跳转拦截确认页面虽然这种拦截的初衷是好的,但是我相信大家平时肯定不会因为有了这个拦截提醒页面,就会对即将打开的网站安全性提高自己的警惕...