Cloud Pub/Sub の再試行の動作確認をしました.Terraform で以下のように topic と subscription を作成しました.なお,subscription は一瞬で status code 500 を返す web サーバーに push するよう設定しました.
resource "google_pubsub_topic" "test" { name = "test-topic" } resource "google_pubsub_subscription" "test" { name = "test-subscription" topic = google_pubsub_topic.test.name ack_deadline_seconds = 600 message_retention_duration = "2400s" retry_policy { minimum_backoff = "60s" maximum_backoff = "600s" } push_config { ... } }
実行される時刻を記録したところ,以下のようになりました.なお,時刻の差を括弧内に付記しています.
2022-12-21 20:00:07.754 JST 2022-12-21 20:01:19.265 JST (72s) 2022-12-21 20:02:47.744 JST (88s) 2022-12-21 20:04:26.106 JST (98s) 2022-12-21 20:06:41.468 JST (135s) 2022-12-21 20:09:47.830 JST (186s) 2022-12-21 20:13:33.489 JST (226s) 2022-12-21 20:17:10.155 JST (217s) 2022-12-21 20:21:35.003 JST (265s) 2022-12-21 20:29:21.875 JST (467s) 2022-12-21 20:37:43.405 JST (502s)
retry_policy.minimum_backoff
から徐々に増加して,retry_policy.maximum_backoff
の値に近づくように変化しました.また,message_retention_duration
の値 (40分) が経過した段階 (20:40 JST) で再試行は終了しました.
再試行のタイミングは秒単位で正確なわけではないものの,概ね設定した通りの動作となることが分かりました.