如何知道消息被传递到哪个流程实例?

How to know which process instance a message was delivered to?

我如何才能获得已发送消息已传递到的流程实例的 ProcessInstanceId?

我正在通过 REST 发送消息 API。

据我所知,执行此操作的唯一方法是在消息中包含源执行或进程 ID。如果您通过运行时服务 API 发送消息,那么您的代码应该如下所示:

String myPid = delegateExecution.getProcessInstanceId();
Map vars = new HashMap();
vars.put('senderProcessInstanceId',myPid);

delegateExecution
    .getEngineServices()
    .getRuntimeService()
    .messageEventReceived("someMessage",targetExecution,vars);

执行此代码后,接收进程可以检索进程 var "senderProcessInstanceId" 的内容,以便知道谁是发件人。

如果您正在使用 REST API,那么您将使用

PUT runtime/executions/{executionId}

像这样使用 JSON body:

{
    "action":"messageEventReceived",
    "messageName":"myMessage"
    "variables": [ {"name": "senderProcessInstanceId", "value":"xxxxx"}  ]
 }

您可以在您的消息中包含一些唯一标识符,作为流程变量(参见例如Camunda BPM REST API 'message' endpoint).在 really 收到消息后,您的目标流程实例就会保存这样的流程变量。

因此,在发送消息后,您可以作为第二步查询接收流程实例(参见 Camunda BPM REST API 'get-instances' endpoint),该实例包含具有预期标识符的变量。