【问题标题】:Camunda Parallel Gateway with compensating actions throws exceptions when an error occurs发生错误时,具有补偿操作的 Camunda Parallel Gateway 会引发异常
【发布时间】:2020-11-13 16:29:24
【问题描述】:

我正在尝试创建一个简单的 Camunda BPM 工作流,其中包含并行网关和如下补偿操作:

所有服务任务都配置为由 C# 程序执行的外部任务。该程序调用 API 上的fetchAndLock 方法来获取要执行的任务列表,然后在后台并行执行这些任务。我在使用这种方法时遇到了一些问题:

fetchAndLock 方法中的 Lock 似乎没有做任何事情,并且工作流引擎似乎不会等到所有获取的任务都被处理后,只要其中一个任务通过bpmnError'. Instead it immediately plans the execution of the compensating actions for the tasks it already received a complete` 调用并删除所有其他计划任务的实例,而不等待它们的结果。

这会导致以下问题:

  • C# 程序继续执行未完成的任务,并在它们完成后尝试调用 API 上的 complete 方法,但由于 Camunda 引擎已删除这些任务实例而失败并出现 404 错误。
  • 永远不会调用这些任务的补偿操作,这会使业务流程处于无效状态。

我做错了什么?我对 BPMN 不是很熟悉,所以也许有更好的方法来设计这个过程。或者这是 Camunda 中的主要错误

【问题讨论】:

    标签: camunda


    【解决方案1】:

    我可以假设在并行网关之后有两个错误触发了事件子流程两次。您可以尝试在事件子流程中使用terminate event

    【讨论】:

    • 谢谢,但没有,1 个并行任务中只有 1 个错误。我希望在引擎中调用 fetchAndLock 时,所有 3 个任务都会被锁定,如果其中 1 个或多个任务失败,引擎将等待所有任务完成,然后再为所有 3 个任务计划补偿逻辑。相反,当程序向引擎报告任务失败并要求更多工作时,它会为失败的任务获得补偿。完成后,将发送通知并停止工作流。导致程序尝试报告其他任务成功时出现404。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多