0

我有一个 camunda 作业,它被配置为对另一个进程的多实例调用。目前多实例异步前、多实例异步后、多实例独占都勾选。我们部署了多个 POD 来处理调用(一次 1k),现在当我尝试运行它时,似乎无论我在做什么,它都在连续运行它们,或者接近它。实际将所有 1000 个元素发送到子进程的多个实例需要什么?

尝试配置多实例异步设置

多实例循环 Cardinality-blank Collection-builtJobList 元素 Variable-builtRequestObject

然后我检查了所有三个多实例值。不检查异步延续。

4

1 回答 1

1

默认情况下,Camunda BPM 一次只会在给定流程实例中运行一个线程(执行)。您可以通过选中“异步之前”和/或“异步之后”复选框来更改给定任务/活动的行为 - 从而选择使用作业执行器 -取消选中“独占”复选框。(这也适用于多实例活动的类似复选框。)如果您这样做,请注意该行为可能不是您想要的;具体来说:

  • 如果您在单个实例上同时运行大量线程,您可能会收到 OptimisticLockingExceptions。当各个线程尝试更新流程实例的关系数据库中的信息并发现在它们执行处理时数据已被修改时,就会抛出这些错误。
  • 如果这些 OptimisticLockingExceptions 发生,Job Executor 将自动重试 Job而不会减少可用的 retries。这将重新执行作业,也重新执行任何包含的集成逻辑。这可能是不可取的。

尽管 Camunda BPM 已被证明在并行执行大量流程实例方面表现出色,但它并非旨在在单个流程实例中同时执行多个线程。如果您希望在给定的流程实例中实现这种行为,我建议您在单个服务任务中自己处理线程,即发即弃地启动您需要的线程,并在启动它们后立即让服务任务在 Camunda 内完成。 .当然如果考虑到您的应用程序所需的行为这是可行的。

于 2019-05-16T23:39:16.690 回答