再試行アクション

停止したJMSキューへのメッセージのエンキューや一意キー制約エラーがあるレコードの挿入などの再試行アクションを使用すると、エラーの原因となったタスクを再試行できます。新規スレッドが各再試行アクションとともに開始されます。したがって、各再試行アクションでは、新規トランザクションが開始されます。表22-1に、再試行アクションに使用可能なオプションを示します。再試行アクションの適用対象は、パラレルのルーティング・ルールのみです。

表22-1 再試行アクションのオプション

オプション 説明

再試行数

N回再試行します。

再試行間隔

再試行を秒単位で遅延します。

指数関数的バックオフ

指数バックオフを使用して再試行間隔を増加します。

再試行失敗アクション

N回の再試行に失敗した場合は、このアクションにチェーンします。

再試行成功アクション

再試行に成功した場合は、このアクションにチェーンします。

ノート:

指数バックオフでは、次の再試行が2倍のdelayでスケジュールされます。ここでのdelayは、現在の再試行間隔です。たとえば、現在の再試行間隔が2秒の場合、次の再試行間隔は4秒にスケジュールされ、その次は8秒、16秒と、retryCount値に達するまで増分されます。

次の例は、再試行アクションの指定方法を示しています。

 <Action id="ora-retry">
 <retry>
 <retryCount>3</retryCount>
 <retryInterval>2</retryInterval>
 <exponentialBackoff/>
 <retryFailureAction ref="ora-java"/>
 <retrySuccessAction ref="ora-java"/>
 </retry>
 </Action>

フォルト・ポリシーの再試行間隔に30秒未満の期間を設定すると、指定した間隔内に再試行が実行されない場合があります。これは、org.quartz.scheduler.idleWaitTimeプロパティのデフォルト値が30秒であり、スケジューラがアイドル状態の場合でも、使用可能なトリガーを再試行するまでに30秒待機するためです。再試行間隔を30秒未満の値に設定した場合は、待機時間が発生する可能性があります。

30秒未満の再試行間隔を使用する場合は、fabric-config-core.xmlファイルのセクション<property name="quartzProperties">の下に次のプロパティを追加します。

org.quartz.scheduler.idleWaitTime=<value>