如何使用远程 API/Spring Boot 在 Camunda 中调用基于事件的网关?

问题描述

我在空闲时间寻找一些有关 Camunda BPM 的知识。然后我遇到了这个 基于事件的网关 组件,这让我过去两天很困难。基本上我正在看这个tutorial,其中这位绅士非常好地讲述了 Camunda BPM 的所有关键组件以及如何执行它们。让我在记住我的查询的基础上简要介绍教程。

因此,我创建了一个类似于教程的 Camunda BPM 工作流程,如下所示:

enter image description here

但是在基于事件的网关组件中,这位绅士使用 REST Api 和以下详细信息 (more detail) 执行了待处理的实例:

Content-type = application/json
method = POST
URI = http://localhost:8080/engine-rest/message
body = {"messageName" : "PaymentReceived","businessKey" : "4"}
然后我浏览了 Camunda [docs][4],在那里我发现了另一个组件,即 **Receive Task**。但根据文档,您可以使用以下 Java 代码调用 Receive Task 的实例:
ProcessInstance pi = runtimeService.startProcessInstanceByKey("DefinationKey");
Execution execution = runtimeService.createExecutionQuery().processInstanceId(pi.getId()).activityId("ActivityId").singleResult();
runtimeService.signal(execution.getId());

但出于好奇,我在接收任务上执行了基于事件的网关的Rest API,并且没有问题。因此,我期望反之亦然,这意味着使用上述代码执行 基于事件的网关 的实例。但它没有。

所以我的问题是,使用 Rest API 调用 基于事件的网关 的实例是唯一的方法,还是我在文档中遗漏了其他方法

罢工>

答案:

这是一个蹩脚的查询,因为我正在尝试执行基于事件的网关的实例,而不是如图所示的确认付款组件。

以下是启发更多details想法的屏幕截图:

enter image description here

因此将实例从付款确认移动所需的代码片段如下

List<MessageCorrelationResult> results = runtimeService.createMessageCorrelation("PaymentReceived").correlateallWithResult();
results.stream().forEach(result->{System.err.println(result.getExecution().getId());});

解决方法

在问题中回答。请检查上方。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...