Mule捕获子流中的异常策略以重启子流

时间:2014-05-01 14:24:30

标签: java mule

我在子流中添加了一个catch异常策略,我希望它能够重新启动"无论何时触发捕获,它的子流(基本上都是goto)。

所以它做了这样的事情: FTPSubflow->    FTP-> ERROR-> Catch-> if(custom_retry_var> 0)>重启FTPSubflow

我可以在我的catch中有一个java组件来检查,但是我不知道如何重新启动子流,并再次执行。我想确定的是,当它重新启动时,如果它在随后的时间内成功,在子流程执行结束时,我的常规流程的执行将继续正常,就像从未发生捕获异常一样。“ p>

Mule和自定义组件可以达到此目的吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

Sub-flows没有自己的异常处理。子流中触发的异常通过调用流(主流)来处理

Private flows是另一种类型的可重用流,非常类似于子流,但在线程和异常处理方面具有非常不同的行为。使用私有流而不是子流的主要原因是在其中定义different exception strategy而不是从调用流中定义(对于子流而言是不可能的)。

私有流只是没有入站端点的主流。要再次启动流,请使用入站端点和catch异常策略创建流主流,创建一个实现 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);        
    }
}