Retriable
概要
Retriable は、ある処理(ブロック)を「例外が出たら自動的に再試行(リトライ)」させたいときに使うDSL 再試行と同時に、指数バックオフ(exponential backoff) やランダム化(ランダム・ファクター) を組み合わせた待機時間制御を内蔵しており、外部 API 呼び出しやネットワーク/IO 処理などのフェイルトレランス向けに適している サンプル
code:ruby
Retriable.retriable(on: Timeout::Error, tries: 3, base_interval: 1) do
# code here...
end
# code here...
end
オプション
table:option
オプション名 デフォルト値 意味/挙動
tries 3 ブロックを実行する回数(最初の試行 + リトライ回数を含む)
on StandardError どの例外をリトライ対象とするか。単一クラス、配列、または例外クラス → メッセージ条件付きハッシュで指定可。
on_retry nil 各リトライが発生した際に呼ばれるコールバック。例外オブジェクト、試行回数、経過時間、次待機間隔などが渡される
sleep_disabled false true にすると待機時間を使わず即リトライ(バックオフなし)
base_interval 0.5 最初のリトライまでの待機時間(秒)
max_elapsed_time 900 全体での最大経過許容時間(秒)。この時間を超えたらリトライを打ち切る。
max_interval 60 個別リトライ間隔がこの秒数を超えないよう抑える上限値。
multiplier 1.5 各リトライごとに待機時間をこの倍率で伸ばす(指数バックオフ)
rand_factor 0.5 待機時間をランダムに揺らす割合。例えば ±50% 程度揺らす。
intervals nil 自前で「リトライ間隔の配列」を与えると、その順序で使う。これを指定すると base_interval/multiplier/rand_factor 等は無視される。
参照