2016-11-07 6 views
0

Apache Camelの(2.15.x)HTTP4コンポーネントを使用していて、外部Webサービスを使用しています。場合によっては200、場合によっては422、時には500となります。 200については、私は良いです。私の問題は、私が500を取得したときに再試行したいが、私が422を取得したときではないということです。どちらの場合も、HttpOperationFailedExceptionです。私はCamelのドキュメントとGoogledを見てきましたが、これを行う方法の例は見つかりませんでした。どんなアドバイスやURLも大歓迎です。Apache CamelでHTTPレスポンスコードに基づいて異なるアクションを実行する方法

ありがとうございました。

答えて

0

ここで私はあなたのシナリオで何をしますか。 HTTP4の直後に、経路定義にカスタムProcessorを実装します。これにより、応答とさらに重要な応答ステータスコードを調べることができます。その後、ステータスコードに基づいて進める方法を定義することになります。

このような何か(半擬似):セクションで

from("http4://SOME_URL").process(new Processor() { 
    public void process(Exchange exchange) throws Exception { 
     Message out = exchange.getOut(); 
     int responseCode = out.getHeader(HttpProducer.HTTP_RESPONSE_CODE, Integer.class); 
     //HERE DECIDE WHAT TO DO BASED ON YOUR RESPONSE CODE! 
    } 
}).to("some_other_endpoint"); 

ルックhere

0

を「レスポンスコードを取得」私は何を探していることはMessageRouterパターンだと思います。ラクダのDSLは、あなたが探しているもので十分であると思う、 '〜'と '〜'と '〜'を可能にする '選択'を提供します。

0

通常のjavaと同様のtry catch式ですべてをラップし、Camel dslで実行できます。

.doTry() 
    .to("your_http_endpoint") 
.doCatch(HttpOperationFailedException.class) 
    .onWhen(header(HTTP_RESPONSE_CODE).equals("500")) 
    .to("do your retry or whatever you want to do") 
    .otherwise() 
    .to("somewhere_else when its not 500") 
.end(); 
関連する問題