当前位置: 首页 > news >正文

开源流程引擎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 文章作者&#xff1a;智星 1.简介 Camunda是一个轻量级的商业流程开源平台&#xff0c;是一种基于Java的框架&#xff0c;持久层采用Mybatis&#xff0c;可以内嵌集成到Java应用、SpringBooot应用中&#xff0c;也可以独立运行&#xff0c;其支持BPMN&a…...

【PTA Advanced】1155 Heap Paths(C++)

目录 题目 Input Specification: Output Specification: Sample Input 1: Sample Output 1: Sample Input 2: Sample Output 2: Sample Input 3: Sample Output 3: 思路 代码 题目 In computer science, a heap is a specialized tree-based data structure that s…...

Educational Codeforces Round 129 (Rated for Div. 2)

A. Game with Cards. 题目链接 题目大意&#xff1a; Alice和Bob玩卡牌。Alice有n张&#xff0c;Bob有m张。第一轮选手出一张数字卡牌。第二轮另一个选手要选择一张比他大的&#xff0c;依此类推。谁没有牌可出则输。问Alice和Bob分别先手时&#xff0c;谁赢&#xff1f;输出…...

[数据库]表的增删改查

●&#x1f9d1;个人主页:你帅你先说. ●&#x1f4c3;欢迎点赞&#x1f44d;关注&#x1f4a1;收藏&#x1f496; ●&#x1f4d6;既选择了远方&#xff0c;便只顾风雨兼程。 ●&#x1f91f;欢迎大家有问题随时私信我&#xff01; ●&#x1f9d0;版权&#xff1a;本文由[你帅…...

分享77个JS菜单导航,总有一款适合您

分享77个JS菜单导航&#xff0c;总有一款适合您 77个JS菜单导航下载链接&#xff1a;https://pan.baidu.com/s/1e_384_1KC2oSTDy7AaD3og?pwdzkw6 提取码&#xff1a;zkw6 Python采集代码下载链接&#xff1a;https://wwgn.lanzoul.com/iKGwb0kye3wj class ChinaZJsSeleni…...

kubernetes -- 核心组件介绍以及组件的运行流程

常用组件大白话说 如果想要官方的&#xff0c;详细的信息&#xff0c;请看官方文档。 https://kubernetes.io/zh-cn/docs/concepts/overview/components/ 现在介绍一些核心的概念&#xff1a; etcd&#xff1a;存储所有节点的信息&#xff0c;节点上部署的容器信息等都存在数…...

微信小程序Springboot短视频分享系统

3.1小程序端 用户注册页面&#xff0c;输入用户的个人信息点击注册即可。 注册完成后会返回到登录页面&#xff0c;用户输入自己注册的账号密码即可登录成功 登录成功后我们可以看到有相关的视频还有视频信息&#xff0c;我的信息等。 视频信息推荐是按照点击次数进行推荐的&am…...

排序算法学习

文章目录前言一、直接插入排序算法二、折半插入排序算法三、2路插入排序算法四、快速排序算法学习前言 算法是道路生涯的一个巨大阻碍。今日前来解决这其中之一&#xff1a;有关的排序算法&#xff0c;进行实现以及性能分析。 一、直接插入排序算法 插入排序算法实现主要思想…...

常见漏洞之 struts2+ jboss

数据来源 本文仅用于信息安全的学习&#xff0c;请遵守相关法律法规&#xff0c;严禁用于非法途径。若观众因此作出任何危害网络安全的行为&#xff0c;后果自负&#xff0c;与本人无关。 01 Struts2相关介绍 》Struts2概述 》Struts2历史漏洞&#xff08;1&#xff09; 》…...

leetcode470 用Rand7()实现Rand10()

力扣470 第一步&#xff1a;根据Rand7()函数制作一个可以随机等概率生成0和1的函数rand_0and1 调用Rand7()函数&#xff0c;随机等概率生成1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6&#xff0c;7 这时我们设置&#xff1a;生成1&#xff0c;2&a…...

JSON数据解析商品详情API

大家有探讨稳定获取商品主图、jiage、标题&#xff0c;及sku的完整解决方案。这个引起了我技术挑战的兴趣&#xff0c;然后各种网上资料查询&#xff0c;最终还是不负努力&#xff0c;找到更好的解决方案&#xff0c;不再出现任何滑块验证码&#xff0c;完全绕过&#xff0c;实…...

服务端开发Java面试复盘篇1

上周投了一些简历&#xff0c;约了8-9家面试&#xff0c;其中完成了3家的第一轮面试&#xff0c;由于面试的是Java 的实习生&#xff0c;感觉问的题目都比较基础&#xff0c;不过有些问题回答的不是很好&#xff0c;在这里对回答的不太好的题目做一下总结和复盘。 目录 一、后…...

Android框架WiFi架构

同学,别退出呀,我可是全网最牛逼的 WIFI/BT/GPS/NFC分析博主,我写了上百篇文章,请点击下面了解本专栏,进入本博主主页看看再走呗,一定不会让你后悔的,记得一定要去看主页置顶文章哦。 一、wpa_supplicant:wpa_supplicant本身开源项目源码,被谷歌收购之后加入Android移…...

rt-thread 移植调试记录

rt-thread 移植调试记录 记录rt-thread移植的过程。这里移植仅仅是利用rt-thread源码目录已经移植好的文件&#xff0c;组建自己的工程&#xff0c;不需要自己编写汇编完成底层移植。 1. 搭建基础工程 这里使用的是正点原子的潘多拉开发板&#xff0c;MCU为stm32l475。需要先…...

红外线额温枪与红外线温度传感器的原理分析

额温枪主要针对测量人体额温基准而设计&#xff0c;使用也非常简单方便。测体温可以达到一秒即可准确测量。并且不需要接触人体&#xff0c;隔着空气即可一键测温。非常适合家庭、学校、企业等场所。 但是由于其精度原因&#xff08;一般为 0.2 ℃&#xff0c;也有更低的&#…...

2023牛客寒假算法集训营4

目录A. [清楚姐姐学信息论](https://ac.nowcoder.com/acm/contest/46812/A)&#xff08;数学&#xff09;B. [清楚姐姐学构造](https://ac.nowcoder.com/acm/contest/46812/B)&#xff08;数学 构造&#xff09;C. [清楚姐姐学01背包(Easy Version)](https://ac.nowcoder.com/…...

vue组合式API及生命周期钩子函数

一、组合式API 什么是组合式API&#xff1f; vue3中支持vue2的选项式、支持新的编程模式–函数式编程&#xff08;没有this指针&#xff09;做了一个兼容&#xff0c;可以在一个组件中使用函数式编程和OOP编程&#xff08;选项式&#xff09; setup()函数 可以使用setup属性…...

Python|每日一练|数组|回溯|二分查找|排序和顺序统计量|.update方法 |单选记录:组合总和|寻找峰值|编程通过键盘输入每一位运动员

1、组合总和&#xff08;数组、回溯&#xff09; 给定一个无重复元素的数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明&#xff1a; 所有数字&#xff08;包括 t…...

minio下载文件速度很慢的原因分析与说明

文章目录1.实战背景2.问题描述3.问题分析4.问题解决1.实战背景 最近在做一个项目&#xff0c;需要用到minio来搭建文件系统&#xff0c;先简单说一下我在项目中设置的上传文件流程&#xff1a; 前端将分块文件逐一传给后端&#xff0c;后端再存储到 linux服务器的minio 当中。…...

基于comsol软件弯曲单模光纤模拟仿真

在本节中&#xff0c;主要基于实验室实际光纤单模圆柱光纤进行模拟&#xff0c;与comsol案例库文件在分析过程和建模有些差异&#xff1a; 模拟主要通过以下三个步骤进行&#xff1a;模型的几何构建、物理场的添加研究、结构处理分析来进行。 下面是第一步骤&#xff1a;几何…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...