【问题标题】:Camel Dead Letter Channel for all exceptions所有异常的骆驼死信通道
【发布时间】:2015-06-29 18:20:06
【问题描述】:

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

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());
    }
}

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

【问题讨论】:

  • 我不太明白,应该重定向到路由的endpoint?哪个端点? from("direct:myDLC") .bean(MyErrorProcessor.class) .to(desiredEndpoint); ?
  • 对不起,我错过了实际路线, from("file:/E:/Target/").routeId("Route1") .setHeader("route1Header").constant("changed") 。 log(LoggingLevel.DEBUG, "Route1Logger", "Inside Route 1") .throwException(new MyException("E_MYERROR_01")) .to("file:/E:/Target/Done");一旦在 deadletterchannel 中处理了 MyException,应该怎么做才能继续上述路线。

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


【解决方案1】:

使用 continue() 会起作用,它会忽略错误并继续处理,所以你可能想要处理特定的异常

http://camel.apache.org/exception-clause.html

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

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

【讨论】:

    猜你喜欢
    • 2014-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 2018-08-15
    • 2023-04-06
    相关资源
    最近更新 更多