Camunda ServiceTask

一:Java class

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

public class JavaClassServiceTask implements JavaDelegate {@Overridepublic 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 {@Overridepublic 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 pydanticfrom camunda.external_task.external_task import ExternalTask, TaskResult
from camunda.external_task.external_task_worker import ExternalTaskWorkerdefault_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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

6.1 截图工具HyperSnap6简介

图片是组成多媒体作品的基本元素之一&#xff0c;利用图片可以增强多媒体作品的亲和力和说说服力。截取图片最简单的方法是直接按下键盘上的“PrintScreen”键截取整个屏幕或按下“AltPrintScreen”组合键截取当前活动窗口&#xff0c;然后在画笔或者其它的图片处理软件中进行剪…

Hyperledger Fabric 管理链码 peer lifecycle chaincode 指令使用

链上代码&#xff08;Chaincode&#xff09;简称链码&#xff0c;包括系统链码和用户链码。系统链码&#xff08;System Chaincode&#xff09;指的是 Fabric Peer 中负责系统配置、查询、背书、验证等平台功能的代码逻辑&#xff0c;运行在 Peer 进程内&#xff0c;将在第 14 …

业界首款PCIe 4.0/5.0多通道融合接口SSD技术解读

之前小编写过一篇文章劝大家不要碰PCIe 5.0 SSD&#xff0c;详细内容&#xff0c;可以再回顾下&#xff1a; 扩展阅读&#xff1a;当下最好不要入坑PCIe 5.0 SSD 如果想要进一步了解PCIe 6.0&#xff0c;欢迎点击阅读&#xff1a; 浅析PCIe 6.0功能更新与实现的挑战 PCIe 6.…

基于Springboot的计算机学院校友网(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的计算机学院校友网(有报告)。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring…

DDPM具体步骤

一、前向过程&#xff08;扩散过程&#xff09; 在前向过程中&#xff0c;模型逐步向数据添加噪声&#xff0c;直到数据完全转化为无结构的噪声 这个过程可以用马尔可夫链来描述&#xff0c;其中每一步都向数据添加一小部分高斯噪声 假设我们有一个初始数据分布 p(x0​)&…

Typescript 中创建对象的方式

1.type type MyObj {a: string;b: number;c: () > number; }; 2.interface interface MyObj {a: string;b: number;c: () > number; } 3. class class MyObj {a:string;b:number;c:()>number } // Error: Property staticProperty does not exist on type M.

PostGIS学习教程二十:3-D

PostGIS学习教程二十&#xff1a;3-D 注意&#xff1a;本文介绍许多PostGIS2.0及更高版本才支持的功能。 文章目录 PostGIS学习教程二十&#xff1a;3-D一、3-D几何图形二、3-D函数三、N-D索引 一、3-D几何图形 到目前为止&#xff0c;我们一直在处理2-D几何图形&#xff08;…

【RH850U2A芯片】RAM and Flash介绍

目录 前言 正文 1.RH850-U2A16芯片RAM 1.1 用户使用RAM类型及大小 1.2 各类RAM起始地址 1.3 LRAM和CRAM的区别 1.4 RAM初始化问题 1.5 RAM使用经验 2.RH850-U2A16芯片Flash 2.1 Flash类型及大小 2.2 各类Flash的起始地址 2.3 Code Flash和Data Flash的区别 2.4 Fl…

Python基础知识:整理7 字典的定义及其相关操作

1 字典的定义 # 1. 字典的定义 # 定义字典的字面量 # {key: value, key: value, ......, key: value}# 定义字典变量 # my_dict {key: value, key: value, ......, key: value}# 定义空字典 # my_dict {} # my_dict dict()定义重复Key的字典 my_dict1 {"张三": …

Spring MVC响应结合RESTful风格开发,打造具有强大功能和良好体验的Web应用!

响应与Rest风格 1.11.1.1 环境准备步骤1:设置返回页面步骤2:启动程序测试 1.1.2 返回文本数据步骤1:设置返回文本内容步骤2:启动程序测试 1.1.3 响应JSON数据响应POJO对象响应POJO集合对象 知识点1&#xff1a;ResponseBody 2&#xff0c;Rest风格2.1 REST简介2.2 RESTful入门案…

Google Earth Engine(GEE)深度学习入门教程- GEE导出篇

GEE导出篇 官方教程&#xff1a;TFRecord 和地球引擎 在GEE的JS Code Editor中&#xff0c;我们按照我们的需要去处理对应的遥感影像&#xff0c;得到处理后Image影像。为了导出后读取数据&#xff0c;在导出前一定清楚每个波段的名称&#xff08;不然没法读取&#xff09;。…

Centos7 手动更改系统时间

文章目录 1.更改系统时间2.写入系统时间3.查看是否写入成功 1.更改系统时间 date -s "2017-12-18 09:40:00"2.写入系统时间 hwclock -w3.查看是否写入成功 timedatectl