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

Camunda中不创建多实例如何通过事件名将2个流程池结果传入第3个流程池

实现步骤

  1. 调整消息定义
    给3个流程池配置3个消息事件:
    • 消息A:供第2、第3个流程池的消息捕获事件监听,用于接收第1个池发送的变量
    • 消息Msg_From_Pool2:供第3个流程池的第二个消息捕获事件监听,用于接收第2个池的运行结果
  2. 替换第1个池的消息发送表达式
    你之前使用的correlateWithResult()方法只会匹配第一个符合条件的消息接收者,这是第3个池收不到第1个池变量的核心原因。将发送逻辑替换为correlateAll()即可同时触发所有监听消息A的接收节点:
    ${execution.getProcessEngineServices().getRuntimeService().createMessageCorrelation("A").setVariable("var_from_pool1", "你需要传递的变量值").processInstanceBusinessKey(execution.getBusinessKey()).correlateAll()}
    
    加processInstanceBusinessKey匹配是为了保证消息只会发送给同业务域的流程实例,避免串数
  3. 新增第2个池的结果发送逻辑
    在第2个流程池业务逻辑执行完成的节点后,新增消息发送逻辑,将运行结果发送给第3个池:
    ${execution.getProcessEngineServices().getRuntimeService().createMessageCorrelation("Msg_From_Pool2").setVariable("var_from_pool2", execution.getVariable("第2个池的结果变量名")).processInstanceBusinessKey(execution.getBusinessKey()).correlate()}
    
  4. 配置第3个池的消息等待逻辑
    把第2、第3个池的第一个消息捕获事件都设置为消息启动事件,则不需要手动创建2、3池的流程实例,消息到达时会自动创建实例,全程只需手动触发第1个池的实例即可,符合你“全程仅创建1个实例”的要求。
    第3个池启动后配置并行事件网关,网关后接两个消息捕获事件:
    • 第一个捕获事件监听消息A,接收第1个池的变量
    • 第二个捕获事件监听消息Msg_From_Pool2,接收第2个池的运行结果
      两个消息都到达后并行网关才会放行,后续节点即可同时读取两个来源的变量。如果需要变量全局可用,在接收事件的配置页勾选「将消息变量存储为流程全局变量」即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:36:02