我在子流中添加了一个catch异常策略,我希望它能够重新启动"无论何时触发捕获,它的子流(基本上都是goto)。
所以它做了这样的事情: FTPSubflow-> FTP-> ERROR-> Catch-> if(custom_retry_var> 0)>重启FTPSubflow
我可以在我的catch中有一个java组件来检查,但是我不知道如何重新启动子流,并再次执行。我想确定的是,当它重新启动时,如果它在随后的时间内成功,在子流程执行结束时,我的常规流程的执行将继续正常,就像从未发生捕获异常一样。“ p>
Mule和自定义组件可以达到此目的吗?
谢谢!
答案 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);
}
}