2017-06-14 144 views
0

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

flow

+0

随着camunda,您可以使用发动机内部批处理自定义的工作,检出camunda-BPM定制批次扩展。 –

+0

另一种可能性是http://www.flowable.org/。作业处理在Activiti5(Flowable5)<-> Flowable6之间发生了变化。例如Deadletter队列和++ 而且当你检查团队http://www.flowable.org/team.html - >核心activiti团队搬到Flowable。 –

回答

0

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

enter image description here

确保你做多实例异步之前使用异步执行,否则将无法与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> 
+0

似乎multiInstanceLoopCharacteristics确实为每个项目提交。有没有办法设置提交计数?当我使用camunda.bpm.job-execution.core-pool-size = 5时,我注意到日志中存在死锁异常: '### SQL:select * from ACT_RU_EXECUTION where PROC_INST_ID_ =? ###原因:com.microsoft.sqlserver.jdbc.SQLServerException:事务(进程ID 62)在另一个进程的锁资源上死锁,并被选为死锁受害者。重新运行该事务。' – Bully

+0

我在ACT_RU_JOB表 上看到相同的死锁'### SQL:select * from ACT_RU_JOB J where J.EXECUTION_ID_ =?' – Bully