Camunda ServiceTask

一:Java class

Java class实现JavaDelegate接口,只需要配置类的全限定名即可,不需要被Spring容器管理。
在这里插入图片描述

public class JavaClassServiceTask implements JavaDelegate {
    @Override
    public void execute(DelegateExecution execution) throws Exception {
        System.out.println("JavaClassServiceTask");
        String currentActivityId = execution.getCurrentActivityId();
        execution.setVariable(currentActivityId, "ok");
    }
}

二:Delegate expression

实现JavaDelegate接口,配置成Bean的名字即可。
在这里插入图片描述

@Service
public class DelegateExpressionServiceTask implements JavaDelegate {
    @Override
    public void execute(DelegateExecution execution) throws Exception {
        System.out.println(execution.getVariable("JavaClass"));
        System.out.println("DelegateExpressionServiceTask");
    }
}

三:Expression

配置成普通的方法调用,可以是任意类的任意方法,方法的返回值会赋值给Result variable变量,该变量可以从下一个节点获取。
在这里插入图片描述

@Service
public class ExpressionServiceTask {

    public boolean execute(DelegateExecution execution) {
        System.out.println("ExpressionServiceTask");
        return true;
    }
}

四:External

在这里插入图片描述

@Configuration
public class CamundaHandlerConfig {

    @Bean
    @ExternalTaskSubscription(topicName = "java_external_task_topic",
            processDefinitionKeyIn = {"ServiceTaskProcess"},
            lockDuration = 5000)
    public ExternalTaskHandler externalTaskHandler() {
        return (ExternalTask externalTask, ExternalTaskService externalTaskService) -> {
            boolean expressionResult = (boolean)externalTask.getVariable("expressionResult");
            // 处理业务逻辑...
            if (!expressionResult) {
                externalTaskService.handleFailure(externalTask, "error msg...", "error detail...", 0, 5000);
            }
            Map<String, Object> variables = new HashMap<>();
            variables.put("result", 1);
            externalTaskService.complete(externalTask, variables);
        };
    }
}

在这里插入图片描述

# pip3 install camunda-external-task-client-python3
# pip3 install pydantic

from camunda.external_task.external_task import ExternalTask, TaskResult
from camunda.external_task.external_task_worker import ExternalTaskWorker

default_config = {
    "maxTasks": 1,  # 一次只拉一个任务,这样多实例处理就不会所有任务被一个实例锁住
    "lockDuration": 10000,  # 锁任务的时间
    "asyncResponseTimeout": 30000,
    "retries": 0,
    "retryTimeout": 5000,
    "sleepSeconds": 30000,  # 每次拉取的间隔时间
    "auth_basic": {"username": "admin", "password": "123456"}
}


def handle_task(task: ExternalTask) -> TaskResult:
    result = task.get_variable("result")
    if result:
        return task.failure(error_message="error_message",
                            error_details="error_details 如异常堆栈信息",
                            max_retries=0, retry_timeout=5000)
    return task.complete()


if __name__ == '__main__':
    worker = ExternalTaskWorker(worker_id="python-client",
                                base_url="http://localhost:8080/engine-rest",
                                config=default_config).subscribe("python_external_task_topic", handle_task)

五:运行

  1. 启动工作流引擎
  2. 启动Java客户端
  3. 启动Python客户端
repositoryService.createDeployment()
       .name("服务任务流程")
       .addClasspathResource("bpmn/service_task.bpmn")
       .deploy();

identityService.setAuthenticatedUserId("huihui");
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("ServiceTaskProcess");
System.out.println("processInstance=" + processInstance.getId());

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

五:连接器

<dependency>
   <groupId>org.camunda.bpm</groupId>
   <artifactId>camunda-engine-plugin-connect</artifactId>
   <version>${camunda.spring-boot.version}</version>
</dependency>
<dependency>
   <groupId>org.camunda.connect</groupId>
   <artifactId>camunda-connect-connectors-all</artifactId>
   <version>1.5.6</version>
</dependency>
public class HttpConnectorConfigurator implements ConnectorConfigurator<HttpConnector> {
    public Class<HttpConnector> getConnectorClass() {
        return HttpConnector.class;
    }

    public void configure(HttpConnector connector) {
        CloseableHttpClient client = HttpClients.custom()
                .setMaxConnPerRoute(10)
                .setMaxConnTotal(200)
                .build();
        ((AbstractHttpConnector) connector).setHttpClient(client);
    }
}

在文件src/main/resources/META-INF/services/org.camunda.connect.spi.ConnectorConfigurator中配置以下完全限制类。

com.example.camunda.config.HttpConnectorConfigurator

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/305820.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【mars3d】批量关闭矢量数据的startFlicker()闪烁或者全部关闭startFlicker()

问题 1.graphic/entity/billboard怎么能够批量关闭startFlicker()闪烁或者 全部关闭startFlicker()呢&#xff1f; 相关链接 1.http://mars3d.cn/editor-vue.html?idgraphic/entity/billboard 2.http://mars3d.cn/apidoc.html#FlickerEntity 期望效果 1.graphic.stopFlic…

【软考】二叉树的存储

目录 一、基本概念二、二叉树的顺序存储2.1 说明2.2 图示 三、二叉树的链表存储3.1 说明3.2 图示 一、基本概念 1.满二叉树&#xff1a;最深一层都没有子节点&#xff0c;其它层都有左右两个节点 2.完全二叉树&#xff1a;是满二叉树的子集&#xff0c;在完全二叉树中最深一层的…

微信小程序实战-02翻页时钟-2

微信小程序实战系列 《微信小程序实战-01翻页时钟-1》 文章目录 微信小程序实战系列前言计时功能实现clock.wxmlclock.wxssclock.js 运行效果总结 前言 接着《微信小程序实战-01翻页时钟-1》&#xff0c;继续完成“6个页面的静态渲染和计时”功能。 计时功能实现 clock.wxm…

shp格式样本转微软COCO格式样本标注

在做影像识别时&#xff0c;需要大量的样本&#xff0c;对于从事GIS和遥感专业的人员来说&#xff0c;可能使用ArcGIS对着影像&#xff0c;绘制样本效率更高。但是很多框架和开源的代码都是基于PASCAL VOC格式和微软COCO格式的样本。这里我分享一下如何将栅格和shp数据转换微软…

记录汇川:ITP与Autoshop进行仿真连接

1、定义如下程序&#xff1a; 2、ITP新建工程&#xff1a; 3、依次选择&#xff0c;最后修改IP 4、定义两个变量 5、拖一个按钮和一个圈出来&#xff0c;地址绑定&#xff1a;M1 6、地址绑定&#xff1a;Y1 7、PLC启动仿真 8、ITP启动在线模拟器 9、即可实现模拟仿真

Python中调用matplotlib库三维可视化图像像素曲面分布

为了更直观的从3D视角观察一副图像的像素分布&#xff0c;且拖动观察没一个像素细节&#xff0c;可以使用下面代码实现。 目录 一、代码二、效果展示 一、代码 使用代码修改修改的地方如下&#xff1a; 具体实现代码如下: import numpy as np import matplotlib.pyplot as …

大创项目推荐 深度学习实现行人重识别 - python opencv yolo Reid

文章目录 0 前言1 课题背景2 效果展示3 行人检测4 行人重识别5 其他工具6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的行人重识别算法研究与实现 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c…

python接口自动化测试框架介绍

之前在项目中搞了一套jmeter jenkins git ant接口自动化测试框架&#xff0c;在项目中运行了大半年了&#xff0c;效果还不错&#xff0c; 最近搞了一套requests unittest ddt pymysql BeautifulReport的接口自动化测试框架&#xff0c; 测试用例在yaml文件中&#xff0c…

【C语言】time.h——主要函数介绍(附有几个小项目)

time.h是C标准函数库中获取时间与日期、对时间与日期数据操作及格式化的头文件。返回值类型 size_t&#xff1a;适合保存sizeof的结果&#xff0c;类型为unsigned int&#xff08;%u&#xff09;clock_t&#xff1a;适合存储处理器时间的类型&#xff0c;一般为unsigned long&…

vue3+vite+tailwind.css无效问题,兄弟们我来解救你们了

1.按照文档配置&#xff0c;原模原样写&#xff0c;最终发现没效果。。。。。 那是应为vite.config.ts没有配置&#xff0c; 保你100%有效果&#xff01;

一次性讲清楚INNER JOIN、LEFT JOIN、RIGHT JOIN的区别和用法详解

文章目录 Join查询原理Nested-Loop JoinINNER JOIN、LEFT JOIN、RIGHT JOIN的区别INNER JOIN操作LEFT JOIN操作RIGHT JOIN操作总结 参考 Join查询原理 查询原理&#xff1a;MySQL内部采用了一种叫做 Nested Loop Join(嵌套循环连接) 的算法。Nested Loop Join 实际上就是通过 …

力扣——C语言:合并两个有序数组

88. 合并两个有序数组 - 力扣&#xff08;LeetCode&#xff09; 这道题有多种方法可以解决 一、暴力求解 这种方法最简单&#xff0c;我们只需要把两个数组合在一起然后在冒泡排序就可以了 代码如下&#xff1a; void merge(int* nums1, int nums1Size, int m, int* nums2…

springboot——消息中间件

消息的概念 从广义角度来说&#xff0c;消息其实就是信息&#xff0c;但是和信息又有所不同。信息通常被定义为一组数据&#xff0c;而消息除了具有数据的特征之外&#xff0c;还有消息的来源与接收的概念。通常发送消息的一方称为消息的生产者&#xff0c;接收消息的一方称为…

OpenAI ChatGPT-4开发笔记2024-02:Chat之text generation之completions

API而已 大模型封装在库里&#xff0c;库放在服务器上&#xff0c;服务器放在微软的云上。我们能做的&#xff0c;仅仅是通过API这个小小的缝隙&#xff0c;窥探ai的奥妙。从程序员的角度而言&#xff0c;水平的高低&#xff0c;就体现在对openai的这几个api的理解程度上。 申…

Hyperledger Fabric 核心概念与组件

要理解超级账本 Fabric 的设计&#xff0c;首先要掌握其最基本的核心概念与组件&#xff0c;如节点、交易、排序、共识、通道等。 弄清楚这些核心组件的功能&#xff0c;就可以准确把握 Fabric 的底层运行原理&#xff0c;深入理解其在架构上的设计初衷。知其然&#xff0c;进…

RT-Thread 线程间同步 信号量

线程间同步 在多线程实时系统中&#xff0c;一项工作的完成往往可以通过多个线程协调的方式共同来完成。 例如一项工作中的两个线程&#xff1a;一个线程从传感器中接收数据并且将数据写到共享内存中&#xff0c;同时另一个线程周期性地从共享内存中读取数据并发送出去显示&a…

文件或目录损坏的磁盘修复方法

文件或目录损坏是一种常见的计算机问题&#xff0c;可能由多种原因导致&#xff0c;如磁盘故障、病毒或恶意软件攻击、文件系统错误等。这些损坏可能导致数据丢失或无法访问文件&#xff0c;因此及时修复至关重要。本文将深入探讨文件或目录损坏的原因&#xff0c;并提供相应的…

JAVA毕业设计118—基于Java+Springboot的宠物寄养管理系统(源代码+数据库)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringboot的宠物寄养管理系统(源代码数据库)118 一、系统介绍 本系统分为管理员、用户两种角色 1、用户&#xff1a; 登陆、注册、密码修改、宠物寄养、寄养订单、宠物…

解决word图片格式错乱、回车图片不跟着换行的问题

解决word图片格式错乱、回车图片不跟着换行的问题 1.解决方法。 先设置为嵌入型 但是设置的话会出现下面的问题。图片显示不全。 进一步设置对应的行间距&#xff0c;原先设置的是固定值&#xff0c;需要改为1.5倍行距的形式&#xff0c;也就是说不能设置成固定值就可以。

SpringBoot学习(五)-Spring Security配置与应用

注&#xff1a;此为笔者学习狂神说SpringBoot的笔记&#xff0c;其中包含个人的笔记和理解&#xff0c;仅做学习笔记之用&#xff0c;更多详细资讯请出门左拐B站&#xff1a;狂神说!!! Spring Security Spring Security是一个基于Java的开源框架&#xff0c;用于在Java应用程…