2014-05-01 72 views
0

我在子流內添加了一個catch異常策略,並且我希望在觸發catch時每隔一段時間就會「重啓」其子流(基本上是goto)。Mule在子流中捕獲異常策略以重新啓動子流

所以它確實是這樣的: FTPSubflow-> FTP-> ERROR-> Catch->如果(custom_retry_var> 0)>重啓FTPSubflow

我可以在我趕上有一個Java組件來檢查那,但我不知道如何重新啓動子流程,並再次執行。我想確定的是,當它重新啓動時,如果它成功了一個隨後的時間,在子流執行結束時,我的常規流程的執行將繼續正常進行,就像從未發生捕獲異常一樣。

Can Mule和一個自定義組件可以達到這個目的嗎?

謝謝!

+0

試圖運行我的子流在我的使用catch-異常策略元素代碼後,它看起來像你不能有一個子流中。如何讓我的子流觸發特定的catch異常,並在與啓動時完全相同的上下文中重新啓動子流? –

回答

1

Sub-flows沒有自己的異常處理。子流程中觸發的異常通過調用流程(主流程)進行處理(主流程)

Private flows是另一種類型的可重用流程,非常類似於子流程,但在線程和異常處理方面具有非常不同的行爲。使用私有流而不是子流的主要原因是在其中定義一個different exception strategy而不是從調用流(子流不可能做到的事)。

私有流量不過是沒有入站端點的主流量。要再次啓動流程,請使用入站端點和捕獲異常策略創建流程主流,創建一個實現Callable接口的java組件,並使用muleClient.dispatch再次開始流程。

試樣成分會是這樣的:

import org.mule.api.MuleEventContext; 
import org.mule.api.MuleMessage; 
import org.mule.api.lifecycle.Callable; 
import org.mule.api.client.MuleClient; 

public class MyCustomComponent implements Callable { 


    @Override 
    public Object onCall(MuleEventContext eventContext) throws Exception { 
     MuleClient muleClient = eventContext.getMuleContext().getClient(); 
     muleClient.dispatch("jms://my.queue", "Message Payload", null);   
    } 
} 
+0

是的。我實際上將我的子流轉換爲同步流,並且實際上觸發了catch異常。現在你知道如何具體編寫java組件來重啓子流嗎?有什麼地方可以重用嗎?謝謝! –

+0

看起來我可以做一個選擇>檢查我的自定義重試變量,然後再次運行相同的流程作爲流程參考。看起來它迄今爲止工作! –

+0

查看我的編輯樣本 –