簡體   English   中英

Camunda 將消息與正在運行的流程實例相關聯,啟動新的流程實例

[英]Camunda correlating a message to running process instance starts new process instance

我有以下問題:

有一個消息啟動事件,可以說消息名稱是MessageX ,后跟一個任務。 如果我用正文發送 POST 請求engine-rest/message

{
  "messageName" : "MessageX",
  "processInstanceId" : "null",
  "resultEnabled" : "true"
}

我得到了答案

{
    "resultType": "ProcessDefinition",
    "execution": null,
    "processInstance": {
        ...
        "id": "1234-567-8910",
        ...
    }
}

所以現在有一個 id 為1234-567-8910的進程啟動並等待任務。 美好的。 我現在想將相同的消息關聯到 ID 為1234-567-8910的流程實例,如下所示:

{
  "messageName" : "MessageX",
  "processInstanceId" : "1234-567-8910",
  "resultEnabled" : "true"
}

BPMN 如下所示:

在此處輸入圖像描述

我希望他說諸如process 1234-567-8910 is not waiting for message或其他東西,而是他開始了一個新的進程實例......

有沒有辦法只在進程實際上在他實際等待的某個點時才對消息進行關聯?

僅當執行令牌在消息事件中等待時,才能關聯消息。 在您的情況下,執行令牌已經移交給任務,因此關聯失敗並產生了一個新實例。

但是為什么要發送兩次相同的消息呢? 啟動一個帶有消息的實例已經傳遞了它。 您可以通過使用顯式啟動請求(需要在您的流程定義中分離啟動事件和消息事件)來分離流程啟動和消息傳遞:

POST localhost:8080/engine-rest/process-definition/key/<your-process-id>/start HTTP/1.1
{
    "variables": {
        "someVar": {
            "value": "hello", "type":"string"
        }
    },
    "businessKey" : "1234"
}

之后:

POST localhost:8080/engine-rest/message HTTP/1.1
{
  "messageName" : "MessageX",
  "businessKey" : "1234",
  "processVariables" : {
    "someNewVar" : {"value" : 5,  "type": "Integer"}
  }
}

當然,您也可以使用 p-id 進行關聯,但您真的想要跟蹤所有這些 id 嗎?

KR,約阿希姆

您可以在 KIE(jbpm) 中執行此操作。 那里的開始和其他節點是信號,並且有一個 api 。 它還接受過程變量作為參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM