开源流程引擎Camunda

Posted 墨家巨子@俏如来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开源流程引擎Camunda相关的知识,希望对你有一定的参考价值。

开源流程引擎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.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中去,使用也非常简单

使用注解就行

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

以上是关于开源流程引擎Camunda的主要内容,如果未能解决你的问题,请参考以下文章

开源流程引擎Camunda

Activiti7工作流引擎进阶

两款开源.NET工作流引擎 Elsa 与ccflow使用比较

开源.Net 动态脚本引擎NScript

开源流程引擎Camunda BPM如何扩展数据库表

基于camunda开源流程引擎如何实现会签及会签原理解析