我在子流中添加了一个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);
}
}