-1

以下のようなデッドレターチャネルエラーハンドラを作成しています

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

しかし、例外が処理された後、元のメッセージはルートのエンドポイントにリダイレクトされる必要があります..このように例外が処理されたら、ルートを続行するには??

4

1 に答える 1

1

エラーを無視して処理を続行するので、continue() を使用するとうまくいきます。

http://camel.apache.org/exception-clause.htmlを参照してください

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

この例外処理で .useOriginalMessage() を使用すると、元のメッセージが続きのメッセージになります。

于 2015-04-23T07:22:08.893 に答える