You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Camunda 7.19多实例子流程并行调度与终止问题求助

Camunda 7.19 多轮并行Review任务流程解决方案

问题背景

基于Camunda 7.19构建业务流程,核心需求与现有设计如下:

  • 任务需经多人多轮Review Task,直至完成最终决策后进入Decisioned Case子流程
  • 现有流程逻辑:
    1. 通过决策表与Service Task确定需调度的后续任务列表
    2. 用多实例子流程Perform Next Task调度该列表中的任务
    3. 任一Review Task完成决策后,流程需返回父流程继续执行;最终决策任务完成时,终止其余未完成任务并进入决策子流程

当前问题:虽能同时调度多个Review Task,但必须等所有调度任务完成后才会回到父流程的决策网关,无法实现任一任务完成即触发父流程继续执行的需求。

当前行为

Review Task A (completed [B & C should be next])
   |_ Review Task B (Scheduled)
   |_ Review Task C (Scheduled)

Review Task C (Completes [D should be Next, along with whatever from before])
   |_ Only Review Task B (Scheduled)

Review Task B (Completed [Y should be Next, along with whatever from before])
   |_ Only Task Y (Scheduled)

Review Task Y (Completed with case Decisioned)
   |_ Decisioned Case sub-process Starts

期望行为

Review Task A (completed [B & C should be next])
   |_ Review Task B (Scheduled)
   |_ Review Task C (Scheduled)

Review Task C (Completes [D should be Next, along with whatever from before])
   |_ Review Task B (Scheduled)
   |_ Review Task D (Scheduled)

Review Task B (Completed [Y should be Next, along with whatever from before])
   |_ Review Task D (Scheduled)
   |_ Review Task Y (Scheduled)

Review Task Y (Completed with case Decisioned)
   |_ Review Task D (Canceled)
   |_ Decisioned Case sub-process Starts

核心诉求

  1. 并行运行的子流程中,任一任务完成决策后立即返回父流程继续执行,保留未完成任务
  2. 最终决策任务完成时,终止所有其余未完成任务,直接进入Decisioned Case子流程

解决方案

针对Camunda 7.19的特性,可通过以下配置实现需求:

1. 调整多实例子流程的完成模式

将多实例子流程Perform Next Task的完成条件设置为false,同时开启异步执行(Async Before/After):

  • 默认多实例需所有实例完成才触发父流程,设置完成条件为false后,单个实例完成就会触发后续流程逻辑
  • 异步执行避免流程阻塞,确保单个任务完成后父流程能立即响应

2. 用事件子流程捕获任务完成信号

在父流程中添加事件子流程,通过Signal Event捕获Review Task完成的信号:

  • 每个Review Task完成时,触发自定义信号(比如reviewTaskCompleted)
  • 事件子流程接收信号后,执行决策表与Service Task生成新的任务列表,再调度新的多实例任务
  • 注意:信号需配置为针对当前流程实例,避免干扰其他流程

3. 标记最终决策任务并终止剩余任务

当Review Task是最终决策任务时,在任务完成逻辑中添加以下操作:

  • 通过流程变量标记当前任务是否为最终决策任务(比如isFinalDecision: true),任务完成时读取该变量判断逻辑
  • 调用Camunda API终止所有未完成的Perform Next Task子流程实例
  • 直接跳转至Decisioned Case子流程

4. 用网关控制流程分支

在父流程中添加并行网关,分别处理两个分支:

  • 持续接收Review Task完成信号并生成新任务的分支
  • 最终决策任务触发后进入Decisioned Case子流程的分支
  • 通过排他网关判断是否已触发最终决策,避免新任务继续生成

关键代码示例

任务完成时触发信号

// 在Review Task的Delegate类中触发信号
runtimeService.createSignalEvent("reviewTaskCompleted")
  .processInstanceId(processInstanceId)
  .setVariables(completedTaskVariables) // 传递任务决策信息
  .send();

终止未完成子流程实例

// 查询当前父流程下所有活跃的Perform Next Task子流程
List<ProcessInstance> activeSubInstances = runtimeService.createProcessInstanceQuery()
  .superProcessInstanceId(processInstanceId)
  .processDefinitionKey("performNextTaskSubProcess")
  .active()
  .list();

// 逐个终止子流程
for (ProcessInstance subInstance : activeSubInstances) {
  runtimeService.deleteProcessInstance(subInstance.getId(), "Final decision made, cancel remaining reviews");
}

注意事项

  • 需确保流程变量的一致性,避免多任务并行更新变量导致冲突
  • 信号事件需绑定当前流程实例ID,防止跨流程干扰
  • 异步执行的任务需配置合理的事务边界,避免数据不一致

内容的提问来源于stack exchange,提问作者Saher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 10:32:39