REST 服务任务

REST Service Task

我正在学习一个例子REST Service Task

我使用

启动流程引擎
val configuration = new StandaloneProcessEngineConfiguration(); configuration.setProcessEngineName(processEngineName)

这是我的 bpmn 文件片段

<process id="approve-loan" name="Loan Approval" isExecutable="true">
<serviceTask id="process_task" activiti:class="com.noggin.bpm.loan.ProcessRequestDelegate" activiti:exclusive="true" name="compute&#xA;Task">
  <extensionElements>
    <activiti:connector>
      <activiti:connectorId>http-connector</activiti:connectorId>
      <activiti:inputOutput>
        <activiti:inputParameter name="url">http://127.0.0.1:5004/Hello/sayhello</activiti:inputParameter>
        <activiti:inputParameter name="method">POST</activiti:inputParameter>
        <activiti:inputParameter name="headers">
          <activiti:map>
            <activiti:entry key="Accept">application/json</activiti:entry>
            <activiti:entry key="Content-type">application/json</activiti:entry>
          </activiti:map>
        </activiti:inputParameter>
        <activiti:inputParameter name="payload"><![CDATA[{"bundleId":"101","script":"def greet = {\n        \"Hello World\"\n      }\n      greet()"}]]></activiti:inputParameter>
        <activiti:outputParameter name="isActive">Result</activiti:outputParameter>
      </activiti:inputOutput>
    </activiti:connector>
  </extensionElements>

我这样开始这个过程

    val processEngine   =  ProcessEngines.getProcessEngine(processEngineName)
    val runtime         =  processEngine.getRuntimeService
    val processInstance =  runtime.startProcessInstanceByKey(processInstanceKey)

成功,我可以将有效载荷发送到(http://127.0.0.1:5004/Hello/sayhello)。

我的问题是如何从我启动实例的位置检索响应消息。由于响应将在 Json 消息中,该消息应发送回流程发起者。

我相信我昨天在 Camunda 论坛上看到了您发帖的类似问题。 无论哪种方式,我相信问题和答案都是一样的。

让我确保我理解您的问题。 1. 您正在使用 Java API 启动实例 2. 您的流程定义包括一个进行 REST 调用的服务任务。 3. 您的 JavaDelegate class 使用 REST 调用的响应填充 "Result" 流程变量。 4.您想捕获响应。

如果我抓住了您的要求,那么我认为问题出在您对 BPMN 引擎工作原理的理解上。

使用您建模的流程,流程实例将启动,进行 REST 调用,填充 Response 变量,然后立即结束。

由于您当前已对流程建模,因此您将无法在流程执行期间捕获响应。

您的选择: 1. 将您的模型更改为使用某种消息服务发送 "Result",或者添加一个等待状态,您可以在其中检索响应。 2. 使用历史查询 REST API(或等效的 Java API)从已完成的实例中检索结果负载。

最合适的选择实际上取决于您的用例。

干杯, 格雷格