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



我有一个中等复杂程度的BPMN流程,有几个任务和网关。BPMN引擎与Spring Boot一起工作。

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

我认为我需要一种来自c++的goto操作符模拟或来自Spring Boot事件模型的@EventListener模拟,但不确定Camunda是否提供这样的功能。

有什么想法吗?

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

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

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

最新更新