Camunda如何通过外部任务与其他系统自动交互
创始人
2024-12-27 05:34:24
0

文章目录

  • 简介
  • 流程图
  • 外部系统
    • pom.xml
    • logback.xml
    • 监听类
  • 启动流程实例
  • 常见问题
    • Public Key Retrieval is not allowed的解决方法
    • java.lang.reflect.InaccessibleObjectException
  • 流程图xml

简介

前面我们已经介绍了Camunda的基本操作、任务、表:

  1. Camunda组件与服务与基本操作
  2. Camunda ScriptTask SendTask ReceiveTask操作
  3. Camunda中强大的监听服务
  4. Camunda最基本、最常用的表梳理及如何通过服务定位到相关表

这一篇我们介绍一下Camunda的外部任务。

很多时候,任务并不是业务老师来完成,而是外部系统来完成。

这种情况,如何交互呢?

提供接口吗?

Camunda提供了更好的方式,外部服务:只需要在流程图中创建一个服务节点,配置为External就可以。

然后,其他系统可以监听指定的topic,流程到了,就可以获取到通知,完成之后,还可以自动完成任务。

流程图

流程图
设置为type为External,并指定topic。

具体流程图xml我放在最后,需要自取。

外部系统

首先,我们模拟一个外部系统监听任务。

pom.xml

最主要是camunda-external-task-client

    4.0.0    vip.meet   camunda-out-task   1.0.0         UTF-8     8     8                       org.camunda.bpm         camunda-external-task-client         7.15.0                         ch.qos.logback           logback-classic           1.5.6                        javax.xml.bind         jaxb-api         2.4.0-b180830.0359                          org.projectlombok           lombok           1.18.34                              

logback.xml

                                    %d{yyyy-MM-dd HH:mm:ss} %-5level %logger{50} - %msg%n                                                    

监听类

package vip.meet;  import lombok.extern.slf4j.Slf4j; import org.camunda.bpm.client.ExternalTaskClient;  @Slf4j public class UpWorker {      public static void main(String[] args) {         ExternalTaskClient client = ExternalTaskClient.create()                 // 依据实际情况填写程序的IP和端口                 .baseUrl("http://localhost:8088/engine-rest")                 .asyncResponseTimeout(10000)                 .lockDuration(10000)                 .workerId("监听流程任务")                 .build();          client                 // 要处理的主题                 .subscribe("起床了")                 // 流程实例启动设置的业务key //                .businessKey("out-task-key") //                 流程定义时设置的业务key                 .processDefinitionKeyIn("pi-out-001") //                .processDefinitionId("pi-out-001:2:ae842ab3-4179-11ef-b67d-ac74b10c44ef")                 .lockDuration(30000)                 // 处理任务逻辑                 .handler((externalTask, externalTaskService) -> {                     String item = externalTask.getVariable("item");                     Integer money = externalTask.getVariable("money");                     log.info("获取任务参数:item:{},money:{}", money, item);                     // 完成任务                     externalTaskService.complete(externalTask);                 }).open();     } } 

其中:subscribe是要订阅的主题,还可以设置businessKey、processDefinitionKey、processDefinitionId等参数来监听指定流程。

处理逻辑可以通过ExternalTask获取相关流程参数,ExternalTaskService来完成任务。

有几个参数需要说明一下:

  1. lockDuration不是轮询时间,只有一个默认的退火轮询策略,就是如果没有任务,轮询时间间隔会越来越长,直到接受到任务,重新开始计算时间
  2. businessKey:是业务流程启动时指定的实例业务key,多个实例可以使用相同的key
  3. processDefinitionKey:是业务流程定义时,指定的key,多个流程可以使用相同key,只是版本号不同
  4. processDefinitionId:是流程定义Camunda生成的id,这个每次都会变,不建议使用这个来过滤

流程定义key启动key
实例id

启动流程实例

不知道怎么搭建环境的可以先看一下下面这2篇:

  1. Camunda组件与服务与基本操作
  2. Camunda最基本、最常用的表梳理及如何通过服务定位到相关表

可以直接请求 post url:http://localhost:8088/engine-rest/process-definition/key/{流程id}/start

注意版本:启动实例接口文档

{ 	"money": { 		"value": 1024, 		"type": "integer" 	}, 	"item": { 		"value": "你干嘛" 	} } 

Camunda启动流程
Camunda指定启动参数
查看任务如果流程中没有设置执行人,这里可以指派。
完成任务
然后我们可以在外部系统查看有没有监听到:
Camunda外部任务监听我们可以看到外部系统已经接收到任务了,在回去看,可以发现,任务已经完成,流程结束。

常见问题

Public Key Retrieval is not allowed的解决方法

数据库url链接中添加allowPublicKeyRetrieval=true参数。

java.lang.reflect.InaccessibleObjectException

Cause: java.lang.reflect.InaccessibleObjectException: Unable to make public int java.util.XXXX.size() accessible: module java.base does not “opens java.util” to unnamed module @xxxx

MyBatis Ognl反射出错,设置vm参数:–add-opens java.base/java.util=ALL-UNNAMED

idea设置vm参数

流程图xml

                Flow_1giqjon                      Flow_1giqjon       Flow_1c1kuaz                      Flow_1c1kuaz       Flow_0yftk9w                 Flow_0yftk9w                                                                                                                                                                                                                                             

相关内容

热门资讯

相较于以往!悟空大厅辅助看牌(... 相较于以往!悟空大厅辅助看牌(辅助)总是存在有辅助插件(果真有挂)-哔哩哔哩1、用户打开应用后不用登...
第四分钟了解!新道游开挂,四川... 第四分钟了解!新道游开挂,四川点点长牌系统,攻略教程(真是有挂)-哔哩哔哩1、四川点点长牌系统公共底...
做出回应!小闲辅助神器,微乐陕... 做出回应!小闲辅助神器,微乐陕西三代自建房怎么提高胜率-其实是有辅助技巧(哔哩哔哩);1、起透看视 ...
大家学习交流!一键装方片十三张... 大家学习交流!一键装方片十三张辅助,wepoker到底有没有透视,透视大纲(有挂方针)-哔哩哔哩一键...
今天下午!激k辅助器有挂吗(辅... 今天下午!激k辅助器有挂吗(辅助)一贯真的是有辅助软件(竟然有挂)-哔哩哔哩1、全新机制【激k辅助器...
第9分钟了解!创思维激k辅助器... 第9分钟了解!创思维激k辅助器,微信小程序填大坑辅助器,手段教程(有挂透视)-哔哩哔哩一、微信小程序...
透视科技!牛总管辅助免费版,衢... 透视科技!牛总管辅助免费版,衢州都莱辅助器是真是假-确实存在有辅助方法(哔哩哔哩)衢州都莱辅助器是真...
透视软件!柚子联盟辅助脚本,w... 透视软件!柚子联盟辅助脚本,wepoker破解版内购,透视学习(有挂规律)-哔哩哔哩1、这是跨平台的...
围绕透视问题!h5新全游辅助(... 围绕透视问题!h5新全游辅助(辅助)好像存在有辅助app(今日头条)-哔哩哔哩1、上手简单,内置详细...
8分钟了解!海贝大厅辅助下载,... 8分钟了解!海贝大厅辅助下载,潮友会鱼虾蟹塞子概率计算方式,资料教程(有挂猫腻)-哔哩哔哩1、潮友会...