アクターに失敗時に何かを再試行させる良い方法はありますが、再試行間の時間間隔は長くなりますか? アクターに 15 秒後、30 秒後、1 分ごとに限られた回数だけ再試行させたいとします。
これが私が思いついたものです:
- 実際の作業を実行するアクターのメソッドには、オプションの
RetryInfo
パラメーターがあり、存在する場合、現在の再試行回数が含まれます。 - 失敗すると、アクターは自分自身に新しい
ScheduleRetryMessage
withを送信しretryCount + 1
、RuntimeException をスローします。 - 別のアクターがワーカー アクターを監督し、return をディレクティブとして使用し
new OneForOneStrategy(-1, Duration.Inf()
ますResume
。アクターには状態がないため、Resume
問題ないはずです - を受け取ると
ScheduleRetryMessage
、アクターは- if
retryCount < MAX_RETRIES
: Akka のスケジューラを使用してRetryMessage
、希望する遅延後に送信をスケジュールします - そうでなければ、最終的にあきらめて、エラー報告のために別のアクターにメッセージを送信します
- if
これは良い解決策ですか、それともより良いアプローチがありますか?