2017-11-14 2 views
0

特定のエンドポイントが使用できない場合(たとえば、500)、キューファイルは.errorディレクトリに移動されます。私はこのためにパラメータ:moveFailedを使用しています。Apache Camel:ファイルコンポーネントmoveFailed redelivery strategy

<from uri="file:inbox?autoCreate=true&amp;readLockTimeout=2000&amp;charset=utf-8&amp;preMove=.processing&amp;delete=true&amp;moveFailed=.error&amp;maxMessagesPerPoll=50&amp;delay=1000"/> 

によると:キャメル エラーを処理し、再度ファイルをピックアップしていないだろう「失敗」の場所にファイルを移動するときはhttp://camel.apache.org/file2.html

失敗した場合にファイルを再取得できるように再配信ポリシー/戦略を実装する最良の方法はありますか?

答えて

2

ルート全体ではなく、特定のエンドポイントコンポーネントに再配信することによって再試行をセットアップします。

error handlerを使用したい場合は、再試行回数、再試行間の遅延、バックオフ乗数を指定することでこれを行うことができます。

onException(RestException.class) 
      .maximumRedeliveries(3) 
      .redeliveryDelay(100L) 
      .backOffMultiplier(1.5) 

またはあなたのラクダのコンテキストでこれを設定するには:それは再配信の試行を使い果たした後

<errorHandler id="errorhandler" redeliveryPolicyRef="redeliveryPolicy"/> 
<redeliveryPolicyProfile id="redeliveryPolicy" maximumRedeliveries="3" redeliveryDelay="100" backOffMultiplier="1.5" retryAttemptedLogLevel="WARN"/> 

この方法では、ファイルには、エラーフォルダに配信されます。

dead letter handlerを使用して、ファイルを後で処理するキューに入れることもできます。

+0

どこでエラーフォルダを指定しますか? @AndyN – Depzor

+0

あなたはすでにファイルコンポーネントに指定しています。 エラーハンドラに再配信の試行を入れると、ファイルコンポーネントはすべての配信試行が終わるまでエラーを認識せず、そのときまでにファイルをエラーフォルダに移動しません。 – AndyN

+0

エラーハンドラを取得していません: [GenericFileOnCompletion.processStrategyRollback:141]ロールバックファイル戦略:org.apache[email protected]21c3823bファイル:GenericFile [.processing/XXX-local-39727- 1510746978560-0-999] – Depzor