阿里開源工作流框架 compileflow 上手使用
阿新 • • 發佈:2021-07-15
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