Spring 批处理业务流

Spring 批处理业务流,spring,spring-boot,batch-processing,activiti,camunda,Spring,Spring Boot,Batch Processing,Activiti,Camunda,我想问一下批量处理的问题。我需要处理100000个业务流程,这些流程由以下步骤组成:生成PDF(异步)、发送邮件并将文档上载到存档系统。我正在考虑将activiti与spring boot(异步服务任务)结合使用,因为我可以控制失败的作业,并且可以轻松地重试它们。我不知道使用activiti或camunda或其他工具是否是个好主意 您可以使用多实例调用活动。使用多实例,您可以指定调用活动的执行方式(在您的情况下为100_000次)。调用活动将调用您的流程模型来归档pdf。对于每个调用(多实例的实

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


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

<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>

在使用异步继续之前,请确保将多实例设置为异步,否则这将无法处理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>

SequenceFlow_04xoo79
SequenceFlow_0036ezx
100_000

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

<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>

在使用异步继续之前,请确保将多实例设置为异步,否则这将无法处理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>

SequenceFlow_04xoo79
SequenceFlow_0036ezx
100_000

使用camunda,您可以对自定义作业使用引擎内部批处理,签出camunda bpm自定义批处理扩展。另一种可能性是。作业处理在Activiti5(可流动5)和可流动6之间发生了更改。e、 g.死信队列和++检查团队->核心活动时,团队移动到可流动。使用camunda,您可以使用引擎内部批处理进行自定义作业,检查camunda bpm自定义批扩展。另一种可能性是。作业处理在Activiti5(可流动5)和可流动6之间发生了更改。e、 g.死信队列和++当您检查团队->核心活动时,团队移动到可流动。似乎每个项目都有multiInstanceLoopCharacteristics提交。有没有办法设置提交计数?当我使用camunda.bpm.job-execution.core-pool-size=5时,我注意到日志中出现死锁异常:
####SQL:select*from ACT_RU_执行,其中PROC#INST#ID=?###原因:com.microsoft.sqlserver.jdbc.SQLServerException:事务(进程ID 62)在另一个进程的锁资源上被死锁,并被选为死锁受害者。重新运行事务。
我在ACT_RU_作业表上看到了相同的死锁
####SQL:select*from ACT_RU_作业J,其中J.EXECUTION_ID=?
似乎每个项目都会提交multiInstanceLoopCharacteristics。有没有办法设置提交计数?当我使用camunda.bpm.job-execution.core-pool-size=5时,我注意到日志中出现死锁异常:
####SQL:select*from ACT_RU_执行,其中PROC#INST#ID=?###原因:com.microsoft.sqlserver.jdbc.SQLServerException:事务(进程ID 62)在另一个进程的锁资源上被死锁,并被选为死锁受害者。重新运行事务。
我在ACT_______________#作业表上看到相同的死锁
SQL:select*from ACT__________作业J,其中J.EXECUTION_ID=?