compileflow輕量級(jí)可擴(kuò)展流程引擎
compileflow是一個(gè)非常輕量、高性能、可集成、可擴(kuò)展的流程引擎。
compileflow Process引擎是淘寶工作流TBBPM引擎之一,是專注于純內(nèi)存執(zhí)行,無(wú)狀態(tài)的流程引擎,通過(guò)將流程文件轉(zhuǎn)換生成java代碼編譯執(zhí)行,簡(jiǎn)潔高效。
compileflow能讓開(kāi)發(fā)人員通過(guò)流程編輯器設(shè)計(jì)自己的業(yè)務(wù)流程,將復(fù)雜的業(yè)務(wù)邏輯可視化,為業(yè)務(wù)設(shè)計(jì)人員與開(kāi)發(fā)工程師架起了一座橋梁。
Design Intention
- 希望為業(yè)務(wù)開(kāi)發(fā)提供端至端,從設(shè)計(jì)至實(shí)現(xiàn)的業(yè)務(wù)流程解決方案。
- 提供多種流程引擎,實(shí)現(xiàn)從戰(zhàn)略至商業(yè)能力,商業(yè)能力至業(yè)務(wù)流程,業(yè)務(wù)流程至系統(tǒng),并最終實(shí)現(xiàn)業(yè)務(wù)的可視化全局架構(gòu)。
- 設(shè)計(jì)高效的執(zhí)行引擎,實(shí)現(xiàn)對(duì)服務(wù)的快速組合或擴(kuò)展,提升
idea至value的研發(fā)響應(yīng)與交互速度。
Features
- 高性能:通過(guò)將流程文件轉(zhuǎn)換生成
java代碼編譯執(zhí)行,簡(jiǎn)潔高效。 - 豐富的應(yīng)用場(chǎng)景:在阿里巴巴中臺(tái)解決方案中廣泛使用,支撐了導(dǎo)購(gòu)、交易、履約、資金等多個(gè)業(yè)務(wù)場(chǎng)景。
- 可集成:輕量、簡(jiǎn)潔的設(shè)計(jì)使得可以極其方便地集成到各個(gè)解決方案和業(yè)務(wù)場(chǎng)景中。
- 完善的插件支持:流程設(shè)計(jì)目前有
IntelliJ IDEA、Eclipse插件支持,可以在流程設(shè)計(jì)中實(shí)時(shí)動(dòng)態(tài)生成java代碼并預(yù)覽,所見(jiàn)即所得。 - 支持流程設(shè)計(jì)圖導(dǎo)出
svg文件和單元測(cè)試代碼。
Quick Start
Step1: 下載安裝IntelliJ IDEA插件(可選)
插件下載地址:https://github.com/alibaba/compileflow-idea-designer
安裝說(shuō)明:請(qǐng)使用IntelliJ IDEA本地安裝方法進(jìn)行安裝,重新啟動(dòng)IntelliJ IDEA就會(huì)生效。
Step2: 引入POM文件
首發(fā)包暫時(shí)還未上傳到公網(wǎng),后續(xù)穩(wěn)定后會(huì)進(jìn)行上傳
<dependency> <groupId>com.alibaba.compileflow</groupId> <artifactId>compileflow</artifactId> <version>1.0.0</version> </dependency>
注意: compileflow僅支持JDK 1.8及以上版本。
Step3: 流程設(shè)計(jì)
下面以ktv demo為例,通過(guò)demo的演示和實(shí)踐了解節(jié)點(diǎn)及屬性的配置和API的使用。
demo描述:N個(gè)人去ktv唱歌,每人唱首歌,ktv消費(fèi)原價(jià)為30元/人,如果總價(jià)超過(guò)300打九折,小于300按原價(jià)付款。
S3.1
注:bpm文件路徑要和code保持一致,在文件加載模式下流程引擎執(zhí)行時(shí)會(huì)根據(jù)code找到文件。
S3.2
通過(guò)插件進(jìn)行流程設(shè)計(jì)或者直接編寫(xiě)流程xml文件。
S3.3 調(diào)用流程
編寫(xiě)如下單元測(cè)試:
@Test public void testProcessEngine() { final String code = "bpm.ktv.ktvExample"; final Map<String, Object> context = new HashMap<>(); final List<String> pList = new ArrayList<>(); pList.add("wuxiang"); pList.add("xuan"); pList.add("yusu"); context.put("pList", pList); final ProcessEngine processEngine = ProcessEngineFactory.getProcessEngine(); final TbbpmModel tbbpmModel = (TbbpmModel)processEngine.load(code); final OutputStream outputStream = TbbpmModelConverter.getInstance().convertToStream(tbbpmModel); System.out.println(outputStream); System.out.println(processEngine.getTestCode(code)); processEngine.preCompile(code); System.out.println(processEngine.start(code, context)); }
compileflow原生只支持淘寶BPM規(guī)范,為兼容BPMN 2.0規(guī)范,做了一定適配,但僅支持部分BPMN 2.0元素,如需其他元素支持,可在原來(lái)基礎(chǔ)上擴(kuò)展。
