Java ApacheCamel-句柄和重试异常
我正在使用JavaDSL来配置路由。我有一条类似于下面给出的路线Java ApacheCamel-句柄和重试异常,java,spring,apache-camel,Java,Spring,Apache Camel,我正在使用JavaDSL来配置路由。我有一条类似于下面给出的路线 RouteBuilder builder = new RouteBuilder() { public void configure() { // onException(Exception.class).bean("bean"); onException(Exception.class).to("anotherProcessor");
RouteBuilder builder = new RouteBuilder() {
public void configure() {
// onException(Exception.class).bean("bean");
onException(Exception.class).to("anotherProcessor");
from("queue:a").bean("someBean").to("processor");
}
};
在做了一些活动之后,如何放大异常?在异常中,我尝试配置一个处理器和一个bean来重新引发异常。无论哪种方式,camel都会将异常设置为exchange,但不会破坏异常
我在一个junit测试用例中这样做。我正在使用OneException处理器处理异常。在处理器内部,我正在执行断言。断言错误由camel自动处理,测试不会被标记为通过/失败
from(CONSUMER)
.doTry()
.doCatch(SocketTimeoutException.class,Exception.class)
.beanRef("ErrorProcessor","processErrorMessage")
.to("freemarker:ErrorResponseTransformer.ftl")
.end()
.to(PRODUCER)
试抓
onException(Exception.class)
.handled(true)
.process(new Processor() {
public void process(Exchange e) throws Exception {
helper.processErrorMessage(e);
log.info("Response error: "
+ MessageHelper.extractBodyAsString(e.getIn()));
log.info("Response error: "
+ MessageHelper.extractBodyAsString(e.getOut()));
}
});
发生异常时
处理异常并将其作为响应错误消息处理以显示。您甚至可以将.to(ERRORDESTINATION)
或窃听设置为继续正常流量
或者使用camel的errorHandler
希望这能有所帮助。你所说的“炸毁异常”是什么意思?您希望实现什么样的行为?我有一个处理器OneException,如果它抛出任何错误或异常,控件将转到DelegateSyncProcessor,并且异常/错误不会冒泡到客户端。您是否使用Camel JMS组件?如果是,则需要设置
transferException=true
(请参阅)。您可能还必须在onException
语句中调用.handled(false)
。我不记得如果错误由处理器处理,驼峰默认值是什么。可能是Camel将异常标记为默认处理。我有一个处理器OneException,如果它抛出任何错误或异常,控件转到DelegateSyncProcessor,异常/错误不会冒泡到客户端。错误处理最佳实践->默认情况下,在接口扩展的框架或超类中应该有DeadLetterChannel或ErrorHandler,以便捕获任何未处理的异常。