所有例外的Camel Dead Letter频道

时间:2015-04-22 08:23:44

标签: error-handling exception-handling apache-camel dead-letter

我正在创建一个死信频道错误处理程序,如下所示

errorHandler(deadLetterChannel("direct:myDLC").useOriginalMessage().maximumRedeliveries(1));

from("direct:myDLC")
.bean(MyErrorProcessor.class);

Bean MyErrorProcessor应该能够处理所有类型的已检查和未检查的异常,如下所示。

public void process(Exchange exchange) throws Exception {
    Exception e=(Exception)exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class);
    e.printStackTrace();
    if(e instanceof MyUncheckedException){
        logger.error("MyUncheckedException: "+((MyException) e).getErrorCode()+" : "+((MyException) e).getErrorDesc());
    }else if(e instanceof MyException){
        logger.error("MyException: "+((MyException) e).getErrorCode()+" : "+((MyException) e).getErrorDesc());
    }
}

但是在处理异常之后,应该将原始消息重定向到路由的端点..如果这样处理异常后如何继续路由?

1 个答案:

答案 0 :(得分:1)

使用continue()将起作用,它将忽略错误并继续处理,因此您可能希望处理特定的异常

请参阅http://camel.apache.org/exception-clause.html

onException(MyException.class)
    .continued(true)
;

如果您在此异常处理中使用.useOriginalMessage(),则原始消息将是继续的消息。