onException导致路由过程中的无限循环



在我的路由之前有这个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);

最新更新