【01】Camunda系列-入门案例_卡蒙达

Camunda-热门工作流引擎框架

一、工作流相关介绍

  BPM(BusinessProcessManagement),业务流程管理是一种管理原则,通常也可以代指BPMS(BusinessProcessManagementSuite),是一个实现整合不同系统和数据的流程管理软件套件.

  BPMN(BusinessProcessModelandNotation)是基于流程图的通用可视化标准。该流程图被设计用于创建业务流程操作的图形化模型。业务流程模型就是图形化对象的网状图,包括活动和用于定义这些活动执行顺序的​​流程设计器​​​。BPMN2.0正式版本于2011年1月3日发布,常见的​​工作流引擎​​如:Activiti、Flowable、jBPM 都基于 BPMN 2.0 标准。

  然后来看看BPM的发展历程:

【01】Camunda系列-入门案例_Flowable_02

二、Camunda介绍

官网地址:https://camunda.com/

中文站点:http://camunda-cn.shaochenfeng.com/

下载:https://downloads.camunda.cloud/release/camunda-bpm/run/7.15/

案例地址:​​Congratulation! | docs.camunda.org​

前期准备工作: JAVA1.8以上的JRE或JDK

【01】Camunda系列-入门案例_卡蒙达_03

1.Camunda Modeler

  Camunda Modeler 是Camunda 官方提供的一个流程设计器,用于编辑流程图以及其他模型【表单】,也就是一个流程图的绘图工具。可以官方下载,也可以在提供给大家的资料中获取。获取后直接解压缩即可,注意:解压安装到非中文目录中!!!

【01】Camunda系列-入门案例_Camunda_04

启动的效果:

【01】Camunda系列-入门案例_Flowable_05

2.Camunda BPM

下载地址 https://camunda.com/download/

  Camunda BPM 是Camunda官方提供的一个​​业务流程管理​​平台,用来管理,部署的流程定义、执行任务,策略等。下载安装一个Camunda平台,成功解压 Camunda 平台的发行版后,执行名为start.bat(对于 Windows 用户)或start.sh(对于 Unix 用户)的脚本。此脚本将启动应用程序服务器。

【01】Camunda系列-入门案例_卡蒙达_06

  打开您的 Web 浏览器并导航到http://localhost:8080/以访问欢迎页面,Camunda的管理平台。

【01】Camunda系列-入门案例_工作流_07

登录成功的主页:

【01】Camunda系列-入门案例_Flowable_08

3.入门案例

3.1 创建简单流程

  我们先通过 Modeler 来绘制一个简单流程

1.) 创建流程:选择 BPMN diagram (Camunda Platform)

【01】Camunda系列-入门案例_Camunda_09

2.) 创建开始节点:并设定节点名称

【01】Camunda系列-入门案例_Activiti_10

3.) 创建服务节点:设置处理方式

【01】Camunda系列-入门案例_工作流_11

【01】Camunda系列-入门案例_Camunda_12

我们切换节点的类型为 ​​service Task​

【01】Camunda系列-入门案例_工作流_13

【01】Camunda系列-入门案例_Camunda_14

然后我们需要配置​​刷卡付款​​节点,服务类型有很多执行的方法,这次我们使用“external(外部)”任务模式。

【01】Camunda系列-入门案例_工作流_15

具体配置内容为

【01】Camunda系列-入门案例_卡蒙达_16

4.) 添加结束节点

【01】Camunda系列-入门案例_卡蒙达_17

5.) 配置流程参数

  点击画布的空白处,右侧的面板会显示当前流程本身的参数,这里我们修改id为payment-retrieval,id是区分流程的标识然后修改Name 为“付款流程”最后确保 ​​Executable​​​是勾选的,只有​​Executable​​被勾选,流程才能执行

【01】Camunda系列-入门案例_Activiti_18

3.2 外部任务

  在上面设计的流程图,​​刷卡付款​​节点的处理是外部任务,Camunda 可以使多种语言实现业务逻辑,我们以Java为例来介绍。

添加相关的依赖:

<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>

编写处理的业务逻辑的代码

import org.camunda.bpm.client.ExternalTaskClient;

import java.awt.*;
import java.net.URI;

public class Demo01 {
public static void main(String[] args) {
ExternalTaskClient client = ExternalTaskClient.create()
.baseUrl("http://localhost:8080/engine-rest")
.asyncResponseTimeout(10000) // 长轮询超时时间
.build();
// 订阅指定的外部任务
client.subscribe("charge-card")
.lockDuration(1000)
.handler(((externalTask, externalTaskService) -> {
// 获取流程变量
String item = (String) externalTask.getVariable("item");
Long amount = (Long) externalTask.getVariable("amount");
System.out.println("item--->"+item + " amount-->" + amount);
try {
Desktop.getDesktop().browse(new URI("https://docs.camunda.org/get-started/quick-start/complete"));
} catch (Exception e) {
e.printStackTrace();
}

// 完成任务
externalTaskService.complete(externalTask);
})).open();
}
}

运行该方法即可,当流程处理时会执行相关逻辑。

3.3 部署流程

  接下来我们就可以来部署上面定义的流程了。使用 Camunda Modeler 部署流程,点击工具栏中的部署按钮可以将当前流程部署到流程引擎,点击部署按钮,输入Deployment Name 为 “Payment” ,输入下方REST Endpoint 为http://localhost:8080/engine-rest ,然后点击右下角Deploy部署

部署操作:

【01】Camunda系列-入门案例_Flowable_19

部署的时候报错:原因是安装路径中有中文

【01】Camunda系列-入门案例_Activiti_20

部署成功:

【01】Camunda系列-入门案例_工作流_21

然后在BPM中我们可以查看部署的流程:

【01】Camunda系列-入门案例_Flowable_22

3.4 启动流程

  我们使用Rest API发起流程,所以需要一个接口测试工具(例如:Postman),或者也可以使用电脑自带的curl

curl执行如下命令

curl -H "Content-Type: application/json" -X POST -d '{"variables": {"amount": {"value":555,"type":"long"}, "item": {"value":"item-xyz"} } }' http://localhost:8080/engine-rest/process-definition/key/payment-retrieval/start

postman方式处理

在url中输入:http://localhost:8080/engine-rest/process-definition/key/payment-retrieval/start 通过​​POST​​​方式提交,提交的方式是​​JSON​​ 数据,具体内容为:

{
"variables": {
"amount": {
"value":555,
"type":"long"
},
"item": {
"value": "item-xyz"
}
}
}

【01】Camunda系列-入门案例_Camunda_23

然后我们点击发送,操作成功可以看到如下的返回信息

【01】Camunda系列-入门案例_Camunda_24

同时任务执行后我们在控制台可以看到相关的信息

【01】Camunda系列-入门案例_Flowable_25