开源流程引擎Camunda
1.简介
Camunda是一个轻量级的商业流程开源平台,是一种基于Java的框架,持久层采用Mybatis,可以内嵌集成到Java应用、SpringBooot应用中,也可以独立运行,其支持BPMN,用于工作流和过程自动化;CMMN,用于案例管理;DMN,用于业务决策管理,是一款优秀的开源流程引擎。
与它同类型的流程引擎有jbpm、activiti、flowable,但与Camunda相比,Camunda性能和稳定性都表现较好,更轻量级,有人做过相关测试,camunda性能比flowable提升最小10%,最大39%,而且camunda无报错,flowable有报错,camunda在高并发场景下稳定性更好。
下图显示了最重要的组件以及一些典型的用户角色,图片来自官网
分别介绍下核心组件的作用
1. Modeler - 独立安装的建模器(windows、linux、mac),支持BPMN 2.0、CMMN 1.1、DMN 1.3建模,具体实现集成开源框架https://bpmn.io/
2. Process Engine - 流程引擎,集成到应用中的Java包,用于执行BPMN、CMMN、DMN
3. Web Applicatons - web管理平台(支持独立启动(linux、windows)和集成到SpringBoot启动,支持集群部署(SharedDB、需自定义LB及SessionState))
l REST API - 提供process engine相关处理接口
l Cockpit - 管理流程process及流程实例process instances
l Tasklist - 管理流程process中的具体任务task(导航到具体task、提供表单form输入、修复流程实例等)
l Admin - 管理用户users、组织group、授权authorizations
2. 特点
1、支持外部任务(External Task)
2、支持任意节点的跳转
3、支持重启(Restart)已经关闭的流程实例
4、支持流程实例的迁移
5、支持批量操作的 API
6、流程图绘制工具有桌面版本
7、定时节点
8、网关节点
9、消息接收节点
10、执行监听器
3. 快速开始
3.1.下载和安装
首先,需要安装 Camunda BPM平台和Camunda Modeler
环境需要java1.8以上
第一步下载安装Camunda BPM平台,下载地址是https://camunda.com/download/
点击下载,压缩包下载后解压到一个目录
Windows环境点击start.bat启动,linux环境运行start.sh
启动好后,访问http://localhost:8080/camunda-welcome/index.html就可以愉快的玩耍了,默认用户名和密码是:demo/demo,界面如下
接下来我们下载Camunda Modeler,是同一个下载页面,
下载地址https://camunda.com/download/modeler/
下载后解压即可使用,点击Camunda Modeler.exe,界面如下
2个安装好后,就可以去编辑执行你的第一个流程了
3.2.编辑流程
接下来我们使用Camunda Modeler创建第一个BPMN 2.0流程,并执行一些自动任务
使用建模器绘制一个简单的流程图
最后把流程保存到一个位置,并且命名
使用java代码进行测试
创建一个普通maven项目,引入相关依赖
<dependencies> <dependency> <groupId>org.camunda.bpm</groupId> <artifactId>camunda-external-task-client</artifactId> <version>7.15.0</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.6.1</version> </dependency> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> </dependencies> |
Java代码
package org.camunda.bpm.getstarted.chargecard; import java.util.logging.Logger;import java.awt.Desktop;import java.net.URI; import org.camunda.bpm.client.ExternalTaskClient; public class ChargeCardWorker { private final static Logger LOGGER = Logger.getLogger(ChargeCardWorker.class.getName());
public static void main(String[] args) { ExternalTaskClient client = ExternalTaskClient.create() .baseUrl("http://localhost:8080/engine-rest") .asyncResponseTimeout(10000) // long polling timeout .build();
// subscribe to an external task topic as specified in the process client.subscribe("charge-card") .lockDuration(1000) // the default lock duration is 20 seconds, but you can override this .handler((externalTask, externalTaskService) -> { // Put your business logic here
// Get a process variable String item = externalTask.getVariable("item"); Integer amount = externalTask.getVariable("amount");
LOGGER.info("Charging credit card with an amount of '" + amount + "'€ for the item '" + item + "'...");
try { Desktop.getDesktop().browse(new URI("https://docs.camunda.org/get-started/quick-start/complete")); } catch (Exception e) { e.printStackTrace(); }
// Complete the task externalTaskService.complete(externalTask); }) .open(); }}
|
运行即可
3.3.部署流程
接下来部署流程到流程引擎,然后发起流程,检查流程是否发起成功
部署流程
部署成功后左下角会有一个提示信息,可以使用Cockpit监控查看部署流程情况
接下来使用postman测试一下
发起一个post请求,
地址为http://localhost:8080/engine-rest/process-definition/key/my-payment/start
参数为json格式
{ "variables": { "amount": { "value":555, "type":"long" }, "item": { "value": "item-xyz" } } } |
在之前跑的java程序,控制台上也能看到信息
3.4.添加人工任务
接下来配置人工任务,选中批准付款节点,点击右侧用户分配,分配给demo用户
在人工任务中配置基本表单,选中付款节点,点击forms进行如下配置
Type: Camunda Forms
Form Ref: payment-form
Binding: deployment
需要创建一个新的form名字为payment.form,id为payment-form待会关联起来,
接下来就可以拖拽组件,创建3个字段分别为金额,项目,是否同意
字段1 Type: Number Key: amount Field Label: Amount
字段2 Type: Text Field Key: item Field Label: item
字段3 Type: Checkbox Key: approved Field Label:approved?
之后点击start process,选择付款流程,之后开启流程后可以在Tasklist,http://localhost:8080/camunda/app/tasklist/看到,选中刚才的批准付款节点可以看到添加的表单
3.5.添加网关
接下来给流程图添加网关
接下来配置网关,选择连线配置条件,其中注意一下是和否的表达式不一样,是就是${approved},否就是${!approved}
接下来的流程跟之前是一样的,只是可以添加变量来测试动态的流程
3.6.决策自动化
接下来使用DMN给流程添加一个业务规则
首先将业务规则添加到流程中
接下来新建一个DMN表格,id命名为approve-payment,一定要跟之前引用保持一致
之后点击表格编辑DMN表,设置输入和输出参数
双击Input或者Output配置输入输出参数
最后设置的表格长这个样子
最后点击部署按钮进行部署,之后在http://localhost:8080/camunda/app/cockpit/
点击Decisions就可以看到了
接下来可以开启流程去测试一下,地址http://localhost:8080/camunda/app/tasklist/
到此为止,入门案例就已经完成了,后续还可以集成到springboot中去,使用也非常简单
使用注解就行