如何从Camunda中的任何流程点跳转到事件?

How to jump to the event from any process point in Camunda?

我有一个具有多个任务和网关的中等复杂度的 BPMN 流程。 BPMN 引擎与 Spring Boot.

一起工作

现在,我有以下任务:如果我收到对我的端点的请求,我需要触发一个特殊的流程事件,无论该流程目前处于哪一步。我尝试使用 Signal Event,但找不到允许我不在特定点上抛出事件,而是以编程方式抛入特定流程实例(使用其执行 ID)的解决方案。

我想我需要一种来自 C++ 的 goto 运算符类似物或来自 Spring 引导事件模型的 @EventListener 类似物,但不确定 Camunda 是否提供这样的功能.

有什么想法吗?

您可以为不同的'scopes'定义捕获事件。例如,接收消息边界事件可以附加到嵌入式子流程。这样,进程将准备好在嵌入式子进程的整个持续时间内接收消息,无论它当前处于哪个任务中。请参阅:https://docs.camunda.org/manual/latest/reference/bpmn20/subprocesses/embedded-subprocess/ 这些边界事件可以是中断的(嵌入式子流程)或非中断的(来自单独分支的新令牌)

另一种解决方案是使用基于事件的子流程。这些可以放置在嵌入式子流程中,以将它们限制在流程的定义范围/部分,或者可以放置在父流程中,在那里它们充当 'global' 事件处理程序。参见:https://docs.camunda.org/manual/latest/reference/bpmn20/subprocesses/event-subprocess/

一旦流程实例达到消息接收状态,您就可以向流程实例发送消息(或信号)以影响其行为。要将消息与众多流程实例中的正确流程实例相匹配,您需要一个相关标准。最简单和最好的解决方案是给每个流程实例一个唯一的业务密钥(特殊流程数据)。然后可以将此业务密钥用作消息 API 的参数,以将消息与正确的流程实例相关联。参见:https://docs.camunda.org/manual/latest/reference/rest/message/post-message/ 如果没有可用的业务密钥,则可以使用(组合)流程数据作为关联标准。