开源流程引擎Camunda

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

开源流程引擎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
  1. REST API - 提供process engine相关处理接口
  2. Cockpit - 管理流程process及流程实例process instances
  3. Tasklist - 管理流程process中的具体任务task导航到具体task、提供表单form输入、修复流程实例等
  4. Admin - 管理用户users、组织group、授权authorizations
  1. 特点

1、支持外部任务External Task

2、支持任意节点的跳转

3、支持重启Restart已经关闭的流程实例

4、支持流程实例的迁移

5、支持批量操作的 API

6、流程图绘制工具有桌面版本

7、定时节点

8、网关节点

9、消息接收节点

10、执行监听器

  1. 快速开始

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.formid为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选择付款流程之后开启流程后可以在Tasklisthttp://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中去使用也非常简单

使用注解就行

文章结束如果喜欢请给个好评!!!

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6