2016-04-15 9 views
1

内部にグルーヴィーなコンポーネントがあります。成功するまで、ブロックはjava.lang.IllegalArgumentExceptionをスローしています。私は今、理想的には真でなければならず、再試行が唯一、この特定の例外のために起こるべき式#[exception.causedBy(java.lang.IllegalArgumentExceptionが)]同期が成功しない失敗式が機能しない

を宣言していますが、それらはすべての例外のために起こっているまで、成功失敗式で また、私が手作業で失敗表現を '#[false]'でFalseに設定したり、変数を設定してその値を変数自体と比較したりしても、それは動作しません。

<until-successful maxRetries="5" millisBetweenRetries="600" failureExpression="[exception.causedBy(java.net.SocketTimeoutException)]" doc:name="Until Successful" synchronous="true"> 
     <scripting:component doc:name="Groovy"> 
      <scripting:script engine="Groovy"><![CDATA[throw new IllegalArgumentException()]]></scripting:script> 
     </scripting:component> 
    </until-successful> 

特定の例外に対して再試行し、他の例外に対しては、再試行せずに例外をスローする必要があります。

答えて

1

私は、Until-SuccessfulスコープがFailureExpressionでどのように機能するかを誤解していると思います。デフォルトでは

  • 、任意の例外が、その中にスローされた場合まで、成功したリトライ:再びデ・ドキュメントhereを読み取ることにより

    は、この範囲は、次のように動作します。したがって、例外がスローされた場合、ペイロードまたはヘッダーの内容が何であっても再試行は行われません。

  • FailureExpressionが設定されている場合、例外がスローされた場合はUntil-Successfulが再試行され、Trueの場合はFailureExpressionが評価されます。

failureExpression:これを読んで、それがtrueに評価され、式を指定し、1つのルートの処理が失敗したと判断しました。式が指定されていない場合、例外のみが処理の失敗として扱われます。

あなたのケースでは、FailureExpressionがTrueと評価されたため、Until-Successfulスコープが実際に再試行されます。この式を#[true]に置き換えると、設定された最大試行回数に達するまで必然的にこのスコープが再試行されます。お返事トニーのため

/トニー・

+0

おかげで);

はそれがお役に立てば幸いです。誤解をおかけして申し訳ありません...私はそれが真実か偽であるとしても、すべての例外を再試行していると言います。 だから私は特定の例外を処理して、Until-Successfulで再試行したいとします。Rest再試行せずにCatchブロックに直接スローしたいです。 – srbhvatsa

+0

この場合、スクリプトブロックを別のフローに置き、成功するまでスコープに ''を使用することをお勧めします。このフローから、前者に特化した例外戦略を追加し、内部に捕捉される例外を除くすべてを指定することができます。したがって、成功するまでスコープはそれらのためにもう再試行しません。 –

関連する問題