工作流Camunda入门demo

准备工作

先下载2个客户端,分别是Camunda Platform和Camunda Modeler

Camunda Platform是用来部署的
Camunda Modeler是用来设计流程的

具体的流程里的实际动作还是需要我们自己写代码去订阅实现的。

直接上官网的2个下载地址,下载后不需要配置环境变量直接就能run,我这边本地pc是windows的所以下载了windows的,运行步骤可以直接看官网文档

Camunda Platform
https://camunda.com/download/

平台登录默认账密
demo/demo
在这里插入图片描述

Camunda Modeler
https://camunda.com/download/modeler/
在这里插入图片描述

camunda中几个关键的层次关系

  • 流程定义 (Process Definition): 流程定义是对业务流程的蓝图或模板,它是静态的,按照BPMN 2.0规范进行建模。
  • 流程实例 (Process Instance):
    当流程定义被部署并且启动时,就会创建一个流程实例。流程实例是流程定义的一个具体运行时实例,它反映了流程从开始到结束的实际执行路径和状态。
  • 任务 (Tasks) 和 任务实例 (Task Instances): 在流程定义中,可以定义各种类型的用户任务、服务任务、脚本任务等。
    每当流程实例到达流程中的某个用户任务节点时,流程引擎会根据流程模型的配置创建对应的任务实例。
    任务实例具有生命周期,可以被创建、分配给参与者、完成或取消等。 多个任务实例之间可能存在层次关系,例如:
    序列关系:在一个串行流程中,任务A完成后才会触发任务B的创建,这时任务A和任务B存在前后顺序的层次关系。
    并行关系:在并行网关处分支的情况下,可能会同时创建多个任务实例,这些任务实例间是并发执行的并行层次关系。 嵌套子流程
    (Subprocesses):
    子流程也是一个流程实例,它可以有自己的用户任务。在这种情况下,子流程内部的任务实例与父流程实例之间形成嵌套层次关系。
  • 多实例 (Multi-instance Tasks): Camunda
    BPMN支持任务的多实例特性,允许单个任务节点生成多个实例,例如需要多位员工共同签署的会签任务,每个待签署的个体都会有一个独立的任务实例。

简单设计一个流程

在2者启动之后,打开modler开始demo制造。

双击开始圆圈节点,起个名字,然后鼠标左点击后选择Append task(空白矩形),然后也是双击起个名字,之后点击Append task后选择change type改成service task,最后增加一个end节点。

接着在service task里的Implementation中修改类型为External,给topic起个名字,这个topic名字就是一会我们需要在代码里订阅的。

最后就是部署,然后启动我们的代码。用postman抛个demo数据过去看能不能接收到。

下面用图片描述下上面的流程

1-新建文件

官网用的文档也是这个version 7的,所以我这里就直接创建版本7的了

在这里插入图片描述

2命名开始节点
在这里插入图片描述

3-创建一个任务并命名

在这里插入图片描述

4-修改任务为service task
在这里插入图片描述

5-追加结束节点并命名
在这里插入图片描述

6-修改刚创建的task类型

在这里插入图片描述

7-自定义代码订阅任务节点内容

我这边使用的java
导入依赖

<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>

直接运行下面这段代码

package com.fchan.worker;

import org.camunda.bpm.client.ExternalTaskClient;

import java.awt.*;
import java.net.URI;
import java.util.logging.Logger;

/**
 * ClassName: ChargeCardWorker
 * Description:
 * date: 2022/11/11 10:18
 *
 * @author fchen
 */
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) // 长轮询超时时间
                .build();

        // 订阅指定的外部任务,task的topic
        client.subscribe("task_demo")
                .lockDuration(1000) // 默认锁定时间为20秒,这里修改为1秒
                .handler((externalTask, externalTaskService) -> {
                    // 将您的业务逻辑写在这

                    // 获取流程变量
                    String item = (String) externalTask.getVariable("item");
                    Long amount = (Long) 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();
                    }

                    // 完成任务
                    externalTaskService.complete(externalTask);
                })
                .open();
    }

}

8-部署流程

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

9-测试

post请求
http://localhost:8080/engine-rest/process-definition/key/Process_0d1kgby/start

Process_0d1kgby就是刚刚我们流程的id

body内容可以自定义,和我们代码对上即可

{
    "variables": {
        "amount": {
            "value": 555,
            "type": "long"
        },
        "item": {
            "value": "item-xyz"
        }
    }
}

测试成功
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Activiti 是一种开源的工作流引擎,用于实现和管理业务流程。封装一个 Activiti 工作流引擎的 Demo 可以帮助我们更好地理解和使用这个工具。下面我将介绍如何封装一个 Activiti 工作流引擎的 Demo。 首先,我们需要在项目中引入 Activiti 的依赖,可以通过 Maven 或者手动导入 jar 包的方式。接下来,我们可以创建一个基于 Spring Boot 的应用程序。 在 Demo 中,我们需要定义一些基本的流程定义和流程实例。流程定义是一个流程模板,描述了业务流程的结构和步骤;而流程实例是流程定义的一个具体执行过程。 为了创建流程定义,我们需要使用 Activiti 提供的 ProcessEngineConfigurator 类。该类可以帮助我们初始化和配置 Activiti 引擎。在配置文件中,我们可以定义数据库连接信息、创建流程定义的方式以及其他相关配置。 在 Demo 中,我们可以使用 BPMN (Business Process Model and Notation)来定义流程模型。BPMN 是一种标准化的图形化表示语言,可以帮助我们更好地理解和管理业务流程。我们可以使用 Activiti 提供的设计器来创建和编辑 BPMN 文件。 接下来,我们需要实现流程定义的部署和启动。部署是将流程定义存储在 Activiti 引擎中的过程,启动是根据定义的流程模板创建一个流程实例。 我们可以使用 Activiti 提供的 RepositoryService 来进行部署操作。通过该服务,我们可以将 BPMN 文件部署到引擎中,并且可以查询已经部署的流程定义。 通过调用 RuntimeService 的 startProcessInstanceByKey 方法,我们可以根据流程定义的 key(在部署时定义的)启动一个流程实例。 在流程实例启动后,我们可以使用 TaskService 进行任务分配和处理。可以通过查询特定用户的待办任务和已完成任务,完成任务的提交操作。 最后,我们可以使用 HistoryService 来查询已完成的流程实例和任务的历史记录。这可以帮助我们进行流程性能和效率的评估。 封装一个 Activiti 工作流引擎的 Demo,可以帮助我们更好地了解和使用这个工作流引擎。通过实际的示例,我们可以学习如何创建流程定义、部署和启动流程实例、处理任务以及查询历史记录等操作。这将帮助我们更好地管理和优化业务流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值