擬似スーパーバイザーによる再実行
注意点
メッセージングのミドルウェア(RabbitMQ、Kafkaなど)が利用できるならこのパターンは使わないほうがいいです。
スーパーバイザーとは
ETPとかAkkaとかで出てくる、Actorを監視するプロセス。Actorが失敗したら再起動など、事前に定義したストラテジーに基づいて処理します。
処理の流れ
オンライン処理の中である外部サービス(例:メール送信など)と連携を取りますが、外部サービスの信頼性が低いため、高い確率で失敗するとします。
- サービスは外部サービスにイベントを通知
- 外部サービスが失敗した時は「未送信イベント」としてデータストアに記録
- バッチが未送信イベントを対象に外部サービスへの連携をリトライする
いわゆるBackoffSupervisor的な、要は「連携が成功するまで何回でも繰り返す」をAkka、MQを使わずに実現しようとするとこうなりました。