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

使用注解就行

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

<think>嗯,用户现在想了解Camunda这个流程引擎。首先,我需要确定用户对Camunda的了解程度。可能他们之前听说过工作流引擎,但具体到Camunda,可能不太清楚它的特点和优势。用户可能是开发者或者架构师,需要选择一个合适的流程引擎来支持他们的项目。 接下来,我应该考虑Camunda的核心功能。比如BPMN 2.0的支持、流程监控、与Spring的集成等。这些都是Camunda的主要卖点,需要详细解释。用户可能关心如何快速上手,所以需要提到快速启动和开发友好性。 然后,用户可能想知道Camunda与其他流程引擎(比如Activiti)的区别。这时候需要对比两者的社区活跃度、功能完整性以及扩展性。Camunda的社区支持和商业服务可能是一个优势,特别是对于企业级应用来说。 另外,用户可能对实际应用场景感兴趣,比如订单处理、审批流程等。举几个具体的例子会有助于他们理解Camunda的实用性。同时,使用场景中的技术栈,如Spring Boot集成,也是开发者关心的点。 还需要考虑用户可能遇到的问题,比如性能优化、高可用性配置等。虽然用户没有直接问,但提前给出注意事项可以增加回答的全面性。比如索引优化、历史数据清理策略,这些都是在实际使用中需要注意的地方。 最后,用户可能需要资源链接来进一步学习,比如官方文档、社区论坛和GitHub仓库。提供这些资源可以让他们有进一步探索的途径。 总结下来,回答的结构应该包括概述、核心功能、架构、应用场景、代码示例、与其他引擎的对比以及注意事项。这样既全面又结构清晰,方便用户理解Camunda的各个方面,并评估是否适合他们的项目需求。</think>以下是关于流程引擎 Camunda 的详细介绍: --- ### 一、Camunda 概述 **Camunda** 是一个开源的 **工作流与决策自动化平台**,专注于实现 **BPMN 2.0 标准**(业务流程建模与标注),提供完整的流程生命周期管理: - **核心能力**:流程设计 → 部署 → 执行 → 监控 → 优化 - **主要组件**:流程引擎(Process Engine)、任务列表(Tasklist)、驾驶舱(Cockpit)、管理控制台(Admin) - **适用场景**:订单审批、供应链管理、金融风控等需要流程自动化的业务 --- ### 二、核心功能特性 | 功能模块 | 说明 | |-------------------|--------------------------------------------------------------------| | **BPMN 2.0 支持** | 完整支持标准流程图、事件网关、子流程等复杂结构 | | **DMN 1.3 支持** | 决策表自动化(业务规则引擎) | | **CMMN 1.1 支持** | 案例管理(处理非结构化流程) | | **流程监控** | 实时查看流程实例状态、耗时分析、异常追踪 | | **REST API** | 提供 200+ 接口,支持与外部系统集成 | | **历史数据** | 自动记录流程实例完整轨迹,支持审计与报表 | --- ### 三、技术架构特点 #### 1. **部署模式** ```mermaid graph LR A[应用程序] --> B{嵌入模式} A --> C{独立服务模式} B --> D[进程内直接调用] C --> E[通过REST/Java API交互] ``` #### 2. **数据库支持** - 默认使用 **H2**(开发环境) - 生产级支持:**MySQL**、**PostgreSQL**、**Oracle**、**DB2** 等 #### 3. **Spring Boot 集成** ```java @SpringBootApplication @EnableProcessApplication("myProcessApp") public class CamundaApplication { public static void main(String[] args) { SpringApplication.run(CamundaApplication.class, args); } } ``` --- ### 四、典型应用场景 #### 场景 1:订单审批流程 ```bpmn startEvent --> userTask(提交订单) userTask --> exclusiveGateway{金额>5000?} exclusiveGateway -->|是| userTask(经理审批) exclusiveGateway -->|否| serviceTask(自动通过) serviceTask --> endEvent ``` #### 场景 2:异常处理机制 ```java // 补偿事件处理 @SuppressWarnings("unused") public class PaymentCompensationHandler implements JavaDelegate { @Override public void execute(DelegateExecution execution) { // 回滚支付操作 paymentService.rollback(execution.getBusinessKey()); } } ``` --- ### 五、快速开发示例(Spring Boot) #### 1. 添加依赖 ```xml <dependency> <groupId>org.camunda.bpm.springboot</groupId> <artifactId>camunda-bpm-spring-boot-starter</artifactId> <version>7.20.0</version> </dependency> ``` #### 2. 定义流程服务 ```java @Service public class OrderProcessService { @Autowired private RuntimeService runtimeService; public void startOrderProcess(String businessKey) { runtimeService.startProcessInstanceByKey( "orderApprovalProcess", businessKey, Variables.putValue("orderAmount", 12000) ); } } ``` #### 3. 监听用户任务 ```java @Component public class ApprovalTaskListener implements TaskListener { @Override public void notify(DelegateTask delegateTask) { if(delegateTask.getName().equals("经理审批")) { delegateTask.setAssignee("manager_zhang"); delegateTask.setPriority(50); } } } ``` --- ### 六、与 Activiti 对比 | 特性 | Camunda | Activiti | |---------------------|--------------------------------|------------------------| | **社区活跃度** | 商业公司支持,更新频繁 | 社区驱动,发展不稳定 | | **流程版本控制** | 完整支持 | 有限支持 | | **历史数据查询** | 提供优化查询接口 | 基础功能 | | **商业支持** | 提供专业企业版 | 无官方支持 | | **监控界面** | 内置驾驶舱(Cockpit) | 需要自行开发 | --- ### 七、生产环境注意事项 1. **数据库优化** - 为 `ACT_RU_*`(运行时表)和 `ACT_HI_*`(历史表)建立索引 - 定期清理历史数据(使用 `historyTimeToLive` 配置) 2. **高可用配置** ```yaml camunda: bpm: job-execution: deployment-aware: true # 启用分布式任务调度 database: schema-update: false # 生产环境关闭自动更新表结构 ``` 3. **性能调优** - 调整异步作业线程池大小 - 启用二级缓存(使用 Ehcache 或 Hazelcast) --- ### 八、学习资源推荐 1. 官方文档:[https://docs.camunda.org](https://docs.camunda.org) 2. 社区论坛:[https://forum.camunda.org](https://forum.camunda.org) 3. GitHub 仓库:[https://github.com/camunda](https://github.com/camunda) Camunda 特别适合需要 **高可靠性流程控制** 和 **可视化监控** 的企业级应用场景,其清晰的 API 设计和丰富的工具链能显著提升开发效率。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨家巨子@俏如来

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值