Mule Catch子流中的异常策略以重新启动子流



我在子流中添加了一个catch异常策略,我希望它在触发catch时"重新启动"其子流(基本上是作为goto(。

所以它会做这样的事情:FTP子流->FTP->错误->捕获->如果(custom_try_var>0(>重新启动FTP子流

我可以在catch中有一个java组件来检查这一点,但我不确定如何重新启动子流,然后再重新启动。我想确定的是,当它重新启动时,如果它在后续时间成功,在子流执行结束时,我的常规流的执行将照常进行,就像从未发生catch异常一样。

Mule和一个自定义组件可以做到这一点吗?

谢谢!

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);        
    }
}

最新更新