在我的路由之前有这个onException
块
onException(Exception.class)
.process(new IncProcessor(IncService))
.handled(true);
处理器所做的是捕获发生的异常,并使用API将其发送并存储在我想要的地方。问题是,当IncProcessor
遇到错误时,它会导致无限循环,因为onException
块捕获了IncProcessor
中发生的错误,并试图再次运行相同的处理器。有什么办法可以绕过这一点吗?
您可以将错误处理逻辑包装在通常的try/catch
块中,以避免IncProcessor
错误,从而使您的路由业务错误变得混乱:
public class IncProcessor implements Processor {
public void process(Exchange exchange) {
try {
// process the exchange error
} catch (Exception e) {
// swallow, log, or process the exception somehow
}
}
}
为了避免丢弃Exception-Processor
错误,一种简洁的处理方法是
定义一个新的子-Exception
:
public class IncProcessingException extends RuntimeException {
// ...
}
将错误包装在定义良好的错误中:
public class IncProcessor implements Processor {
public void process(Exchange exchange) {
try {
// process the exchange error
} catch (Exception e) {
throw new IncProcessingException(e);
}
}
}
为处理异常定义自定义重发策略:
onException(IncProcessingException.class)
.maximumRedeliveries(1);