0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Cloud Functionsのリトライ制限

Posted at

節操のないリトライ

Cloud Functionsには失敗時に再試行する機能があるんです。
ただ、この連コインが節度なく、秒間数回の割合で送られてくるのです。
そのため、例えば、Cloud Functionsからアクセスされるサーバでシステム障害でエラーが出ていた場合、
その様相たるや、永パが際限なく続くようなものであります。

リトライ制限

そのような状況を防ぐには、こうします。
一定時間経ったらリクエストを拒否するようにします。

// 受信メイン処理
func main(ctx context.Context, e GCSEvent) error {
	meta, err := metadata.FromContext(ctx)
	if err != nil {
		return fmt.Errorf("metadata.FromContext: %v", err)
	}

	// メッセージ発行時と現在時を比較して古すぎた場合は処理を終了
	expiration := meta.Timestamp.Add(10 * time.Second)
	if time.Now().After(expiration) {
		log.Printf("event timeout: halting retries for expired event '%q'", meta.EventID)
		return nil
	}

	// メインロジック
	return logic(ctx, e)
}

現場からは以上です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?