当前位置: 首页 > 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;几何…...

如何开启多个独立Chrome浏览器

一、简介 作为测试或者开发人员&#xff0c;有些情况下会用到 Chrome 浏览器&#xff0c;但有时是同一个 Chrome 浏览器无法为我们提供隔离开的不同环境。这样 我们就需要清理 cache 、切换账号等&#xff0c;降低了我们的工作效率。今天的主题是如何开启多个独立的 Chrome 浏…...

erp5开源制造业erp主要业务会计分录处理

erp5开源制造业erp主要业务会计分录处理 采购业务的会计分录 收到发票时 借&#xff1a;材料采购 (1201) 应交税费-应交增值税&#xff08;进项税&#xff09;(21710101) 贷&#xff1a;应付账款 (2121) 付款时 借&#xff1a;应付账款 (2121) 贷&#xff1a;银行存款 (1002) 入…...

技能树基础——17四平方和(拉格朗日定理,嵌套循环)

题目&#xff1a;四平方和定理&#xff0c;又称为拉格朗日定理&#xff1a;每个正整数都可以表示为至多4个正整数的平方和。如果把0包括进去&#xff0c;就正好可以表示为4个数的平方和。比如&#xff1a;5 0^ 2 0^ 2 1^ 2 2^27 1^ 2 1^ 2 1^ 2 2^2 &#xff08;^符号表…...

JPA、EJB、事物管理---相关内容整理

目录 ■前言 ■实现原理&#xff1a;容器管理事务 ■代码实现简单描述&#xff1a; 1.JPA ■定义 ■1.1.配置文件 ■1.2.OSS jar ■1.3.一些OPA的类&#xff08;举例&#xff09; ■1.4. jpa 框架在实体类&#xff08;Entity&#xff09;中添加非数据库字段的属性--…...

C语言学习笔记(一):了解C语言

什么是C语言 C语言是一种高级编程语言&#xff0c;最早由丹尼斯里奇在1972年开发。它是一种通用编程语言&#xff0c;提供了高级编程语言的方便和易用性&#xff0c;同时又有较低级别的编程语言的灵活性和效率。C语言在许多操作系统、编译器和应用程序开发中广泛使用&#xff…...

回头看——《智能家居项目小结》

openAI兴起&#xff0c;于是拿着之前小组合作的项目&#xff08;承认优化较差&#xff09;&#xff0c;交给AI试着帮忙优化下&#xff11;.功能函数&#xff08;TCP_SER_INIT&#xff09;优化源代码&#xff1a;int TCP_SER_INIT(int *tcpsocket, const char *ip, const char *…...

社交登陆OAuth2.0

QQ、微博、github 等网站的用户量非常大&#xff0c;别的网站为了 简化自我网站的登陆与注册逻辑&#xff0c;引入社交登陆功能&#xff1b; 步骤&#xff1a; 1&#xff09;、用户点击 QQ 按钮 2&#xff09;、引导跳转到 QQ 授权页 3&#xff09;、用户主动点击授权&#xff…...

C++005-C++选择与分支2

文章目录C005-C选择与分支2条件语句C实现else if 语句题目描述 根据成绩输出成绩等级ABCDEif嵌套语句题目描述 输出三个数中的最大值题目描述 模拟游戏登录switch语句三元运算符题目描述 输出三个数中的最大值-基于3元运算符题目描述 根据1-7输出星期1-星期日案例练习题目描述 …...

IPFS 简介及概述

文章目录 IPFS 简介IPFS 包含的协议内容及其理解IPFS 和 BitTorrent 区别IPFS 简介 星际文件系统(InterPlanetary File System). IPFS 是一个分布式的网络文件系统, 点到点超媒体协议. 可以让我们的互联网速度更快, 更加安全, 并且更加开放. IPFS协议的目标是取代传统的互联网…...

初学者必读:讲解 VC 下如何正确的创建、管理及发布项目

Visual C 的项目文件组成&#xff0c;以及如何正确的创建及管理项目。 本内容是初学者必须要掌握的。不能正确的管理项目&#xff0c;就不能进一步写有规模的程序。 一、项目下各种常见文件类型的功能 1. 代码文件 扩展名为 .cpp、.c、.h 等。 通常情况下&#xff0c;项目…...

网络班级网站建设/杭州优化公司多少钱

Eclipse 安装(Neon 版本) Eclipse 最新版本 Eclipse Neon&#xff0c;这个首次鼓励用户使用 Eclipse Installer 来做安装&#xff0c;这是一种由Eclipse Oomph提供的新技术&#xff0c;它通过提供一个很小的安装器来使得各种工具可以按需下载和安装。 需要框架源码的朋友可以…...

青岛制作企业网站/长春seo顾问

1.配置httpd.conf 监听多个端口 #Listen 12.34.56.78:80 Listen 8081 Listen 8082 Listen 8083 可以通过netstat -n -a查看端口是否开启 2.开启虚拟站点 # Virtual hosts #Include conf/extra/httpd-vhosts.conf #修改为 # Virtual hosts Include conf/extra/httpd-vhosts.con…...

中国铁建企业门户网站/seo搜索优化技术

摘要&#xff1a;以“数字金融新原力(The New Force of Digital Finance)”为主题&#xff0c;蚂蚁金服ATEC城市峰会于2019年1月4日上海如期举办。财富管理专场上&#xff0c;蚂蚁金服微贷事业群高级前端技术专家王卓做了主题为《蚂蚁微贷互动营销技术体系实践》的精彩分享。 演…...

建筑挂靠十大网站/360营销平台

描述&#xff1a;有一个会员表&#xff0c;有个birthday字段&#xff0c;值为YYYY-MM-DD格式&#xff0c;现在要查询一个时间段内过生日的会员&#xff0c;比如06-03到07-08这个时间段内所有过生日的会员。SQL语句&#xff1a; Select * From user Where date_format(birthday,…...

个体工商网站备案/外链是什么

签名 app为什么要签名&#xff1f; debug包需要签名吗&#xff1f; debug包的签名与release包的签名的区别&#xff1f; android 的debug包需要签名吗&#xff1f; 所有的Android应用程序都要求开发人员用一个证书对app进行数字签名&#xff0c;anroid系统不会安装没有进行签…...

保山网站建设优化/全自动推广软件

一、前言 今天来学习一下django的orm的增加&#xff0c;删除&#xff0c;修改和查询&#xff0c;虽然我们之前学过sqlaclmy的面向对象数据库的操作&#xff0c;但是django的orm有自己的一套&#xff0c;我们还是来学学django是如何操作的吧。 二、前提 2.1、urls的设置 说明&am…...