2016-10-18 9 views
0

私は外部レストサービスを呼び出すルートを持っています。エラーハンドラを以下のように設定しました。私は何をしたいかApace Camel:カスタム再配送ポリシー

errorHandler(deadLetterChannel("jms:dlc").maximumRedeliveries(3)); 

  • 外部APIへの接続が失敗した場合、私は3回を再試行してから、APIコールに問題がない場合は

  • をdeadLetterChannelに送信する、Iステータスコードをチェックし、レスポンスをログに記録してからメッセージをdeadLetterChannelに送信します。そのために

私はfalseにthrowExceptionOnFailureを設定します。

私のルートには、最後のエンドポイントとしてBeanがあります。このBeanは外部エンドポイントから応答を受け取り、ステータスをチェックします。

void process(Exchange exchange){ 
    //check http status code 
    //if not success 
    exchange.setProperty(Exchange.ROUTE_STOP,true); 
    //sendToDeadLetterQueue; 
    } 

私の問題は、APIに接続できても再配信が行われることです。私は再配信が間違って起こることを期待しています。しかし、私は応答を処理し、また交換を停止するように設定しています。

Beanからの再配信を停止できますか?

次のようにあなたがonExceptionを使用することができます

答えて

0

<onException> 
    <exception>SomeException</exception> 
    <handled><constant>true</constant></handled> 
    <process ref="failureResponse"/> 
</onException 

JavaのDSL

onException(ExceptionClass).handled(true) .to(deadLetterChannel);

春のDSLとして扱わ

0

使用onExceptionをタグ:

<onException> 
 
<exception>SomeException</exception> 
 
    <handled><constant>true</constant></handled> 
 
    <to uri=deadLetterChannel/> 
 
</onException>
を10

より明確化するためにクリックしてくださいhere

関連する問題