2017-06-14 140 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