所有异常的骆驼死信通道
Camel Dead Letter Channel for all exceptions
我正在创建一个如下所示的死信通道错误处理程序
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());
}
}
但是在处理异常之后,原始消息应该被重定向到路由的端点..一旦像这样处理异常如何继续路由??
使用 continued() 会起作用,它会忽略错误并继续处理,因此您可能想要处理特定的异常
见http://camel.apache.org/exception-clause.html
onException(MyException.class)
.continued(true)
;
如果您在此异常处理中使用 .useOriginalMessage(),则原始消息将是继续的消息。
我正在创建一个如下所示的死信通道错误处理程序
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());
}
}
但是在处理异常之后,原始消息应该被重定向到路由的端点..一旦像这样处理异常如何继续路由??
使用 continued() 会起作用,它会忽略错误并继续处理,因此您可能想要处理特定的异常
见http://camel.apache.org/exception-clause.html
onException(MyException.class)
.continued(true)
;
如果您在此异常处理中使用 .useOriginalMessage(),则原始消息将是继续的消息。