3

doTry-doCatch ブロックを定義するルートがあります。例外が doCatch ブロックで処理されるとき、ローカルで処理した後にメッセージが確実にデッド レター キューに追加されるように、例外をエラー ハンドラーに伝達する必要があります。問題は、エラー ハンドラーへの伝達を機能させることができないことです ("defaultErrorHandler が呼び出されました!" がコンソールに出力されません)。onException も試しましたが、うまくいきませんでした。

どんなヒントでも大歓迎です。よろしく、 オリバー

protected RouteBuilder createRouteBuilder() throws Exception {
    return new RouteBuilder() {
        @Override
        public void configure() throws Exception {

            errorHandler(deadLetterChannel("ref:myDLQ")
                .log("defaultErrorHandler called! ${body}"));

            final RouteDefinition route = from("seda:queue.inbox");

            route               
                .doTry()
                    .process(new Processor() {
                        public void process(Exchange exchange) throws Exception {
                            System.out.println("throwing ex");
                            throw new IllegalArgumentException("test");
                        }
                    })
                .doCatch(Exception.class)
                    .process(new Processor() {
                        public void process(Exchange exchange) throws Exception {
                            System.out.println("handling ex");
                            route.log(LoggingLevel.ERROR, "Exception in route: ${body}");
                            throw new IllegalArgumentException("rethrow");
                        }
                    })
             .log("Received order ${body}")
             .to("mock:queue.order");                               
        }
    };
}
4

2 に答える 2

2

これによると

Camel エラー処理が無効になっています

doTry .. doCatch .. doFinally を使用する場合、通常の Camel エラー ハンドラは適用されません。つまり、 onException などはトリガーされません。その理由は、doTry .. doCatch .. doFinally は実際には独自のエラー ハンドラーであり、Java での try/catch/finally の動作を模倣して動作することを目的としているためです。

私自身の実験から、doTry 内で発生するすべてのことがエラー ハンドラーまたは例外ポリシーにバブルアップされないことを確認できます。デッド レター チャネルに送信する場合は、doCatch で手動で送信する必要があります。

.to('uri')
于 2013-07-31T14:22:46.947 に答える
1

.handled(false)doCatch で試してください。これを読んでください。

于 2013-06-19T21:25:57.833 に答える