【问题标题】:Batch processing business flows批处理业务流程
【发布时间】:2017-06-14 12:20:04
【问题描述】:

我想问一下批处理。我需要处理 100 000 个业务流程,这些流程由以下步骤组成:生成 PDF(异步)、发送邮件并将文档上传到存档系统。我正在考虑将 activiti 与 spring boot(异步服务任务)一起使用,因为我可以控制失败的作业,并且可以轻松地重试它们等。我不知道使用 activiti 或 camunda 或其他一些工具是否是个好主意。

【问题讨论】:

  • 借助 camunda,您可以使用引擎内部的批处理来处理自定义作业,请查看 camunda-bpm-custom-batch 扩展。
  • 另一种可能性是flowable.org。作业处理在 Activiti5(Flowable5) Flowable6 之间发生了变化。例如Deadletter 队列和 ++ 当您检查团队时 flowable.org/team.html -> 核心 activiti 团队移至 Flowable。

标签: spring spring-boot batch-processing activiti camunda


【解决方案1】:

您可以使用多实例调用活动。使用多实例,您可以指定应如何执行呼叫活动(在您的情况下为 100_000 次)。调用活动将调用您的流程模型来归档 pdf。对于每个调用(多实例的实例),您可以定义一个应该转发给您调用的进程的变量,因此可以在主进程中拥有一个 PDF 文件名列表并将一个名称转发给每个子进程。 主要过程可能如下所示:

确保在使用异步延续之前使多实例异步,否则这不适用于 100_000 个实例。

多实例调用活动可能如下所示:

<bpmn:callActivity id="Task_0fl5th9" name="archiving pdf" calledElement="archivePdf">
  <bpmn:incoming>SequenceFlow_04xoo79</bpmn:incoming>
  <bpmn:outgoing>SequenceFlow_0036ezx</bpmn:outgoing>
  <bpmn:multiInstanceLoopCharacteristics camunda:asyncBefore="true" camunda:collection="pdfNames" camunda:elementVariable="pdfName">
    <bpmn:loopCardinality xsi:type="bpmn:tFormalExpression">100_000</bpmn:loopCardinality>
  </bpmn:multiInstanceLoopCharacteristics>
</bpmn:callActivity>

【讨论】:

  • 似乎 multiInstanceLoopCharacteristics 确实为每个项目提交。有没有办法设置提交计数?当我使用 camunda.bpm.job-execution.core-pool-size = 5 我注意到日志中出现死锁异常:### SQL: select * from ACT_RU_EXECUTION where PROC_INST_ID_ = ? ### Cause: com.microsoft.sqlserver.jdbc.SQLServerException: Transaction (Process ID 62) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
  • 我在 ACT_RU_JOB 表 ### SQL: select * from ACT_RU_JOB J where J.EXECUTION_ID_ = ? 上看到了同样的死锁
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-18
  • 2018-04-16
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 1970-01-01
相关资源
最近更新 更多