2017-07-26 154 views
0

我有一個構建工作流的需求,通過調用API觸發一組批處理作業,然後輪詢另一個API來檢查每個批處理作業何時完成。只有當所有批處理作業完成後,工作流程才能轉移到下一步。做這個的最好方式是什麼?如何在Mule中進行輪詢,直到完成所有任務

我曾考慮過使用投票組件,但我不確定如何啓動和停止投票,因爲我的經驗是在預定時間運行投票或不斷輪詢外部源。我目前的思路是在表達式框中使用一個標誌,一旦所有批量作業完成,這個標誌就設置爲true。

另一個問題是批處理作業ID都在JSON對象中,當API開始返回顯示批處理作業完成的結果時,檢查每個批作業ID的最佳方法是什麼?

我使用Anypoint工作室6.2和Mule 3.8.3

感謝

回答

0

首先 - 假設你的API調用觸發5批作業。在每個作業完成後,您需要更新數據庫或對象存儲中的作業成功/失敗/進度狀態(或任何其他可檢索的方式)。

讓我們說你的工作將在1小時內完成的最短時間。

假設您正在更新數據庫中的狀態。

創建輪詢流程來檢查您的工作狀態是否每分鐘以db爲單位的成功/失敗並使您的流程處於stopped狀態。

<flow name="Job_status_check_flow" initialState="stopped"> 
    <poll doc:name="Poll"> 
     <fixed-frequency-scheduler frequency="1" timeUnit="HOURS"/> 
     <logger level="INFO" doc:name="Logger"/> 
    </poll> 
    <logger message="poll" level="INFO" doc:name="Logger"/> 
    <db component or object store here ---> 
</flow> 

由於流程處於停止狀態,輪詢將不會觸發,直到流程更改爲啓動狀態。你有一個控制。

始終流程將處於停止狀態。當您請求api同時觸發5個批處理作業時,還要啓動'Job_status_check_flow'至start(您可以使用groovy組件 - 根據條件)。請檢查下面

Starting a mule flow programmatically using groovy

auto-starting Mule flow

的鏈接在這種情況下,投票流程檢查狀態,每1小時,直至DB檢索5個作業完成狀態的所有狀態。如果在'Job_status_check_flow'末尾有一個groovy組件到stopped state。因此,民意調查不會再次觸發。

相關問題