2015-12-18 88 views
1

我有一個要求,可以爲用戶分配數千(1000-5000)個任務,屬於不同的流程實例(1000-5000個相同的用戶任務)給定的時間。我有一個自定義的任務列表屏幕,我需要用它們的基本信息(id,name,process instance id等)加載所有任務,併爲每個任務添加一些流程變量。如何在Camunda中獲取用戶任務列表及其過程變量

首先,我使用過濾器/列表REST服務,即engine-rest/filter/{filter-id}/list來獲取包含過程變量的任務。 (我在Camunda任務列表中創建了一個過濾器)。但是,當有超過1000個流程實例存在問題時,此REST服務會永久返回。大約2000個流程實例花費了7-8分鐘。也許是因爲這個服務返回了很多我不需要的信息。

因此,我決定使用Camunda Java API編寫自己的REST服務。這就是我所做的 -

List<Task> tasks = taskService.createTaskQuery().processDefinitionKey(processDefinitionKey).taskAssignee(assignee).list(); 

if(tasks != null && !tasks.isEmpty()){ 

for(Task task : tasks){ 
..... 
..... 
Map<String, Object> variables = taskService.getVariables(task.getId(), variableNames); 
..... 
}} 

這個工作,並比過濾服務快得多。但大約有1000個實例需要大約25秒。 (我的服務器現在不是生產級別,Tomcat Xms -1gb Xmx - 2gb)。

但我擔心的是,內部是這個代碼觸及數據庫1000次(對於taskquery返回的每個任務)來獲取變量?更糟糕的是依賴於變量的數量是否每次都查詢數據庫多次?我的意思是對於5個變量,我們打了5000次數據庫?

1)如果是這樣,有什麼辦法可以改進這項服務嗎?像我可以寫一個NativeTaskQuery我加入act_ru_task,act_ru_process & act_ru_variable表來獲得我需要的數據?這是正確的方式嗎? 2)Camunda中沒有任何內置緩存可以幫助您嗎?

在此先感謝您的幫助。

回答

相關問題