http クライアントのリトライ機能
1時に寝て7時に起きた。今週末もお仕事をがんばる。今週中に開発タスクを完了させたいという思いがある。まだ今週は続いている。
ストレッチ⌗
今日の開脚幅は開始前154cmで、ストレッチ後157cmだった。今週も座っている時間が長かったせいか、あまり数値がよくなかった。ここ2-3週間前から右すねの外側の筋に張りがあったが、これが左にも転移して左すねの外側の筋も張りが強くなってきた。両方とも張りがあるという意味ではバランスが取れたと言えるのかもしれない。いずれにしてもいままで張りがなかったところに違和感があるので引き続き注視していきたい。歩くときにやや気になるけれど、日常生活に支障が出るほどの障害ではない。少し前からオフィス通勤に自転車をやめて、通勤とお昼ご飯を買いに行くのが自転車から歩きになったことが影響しているのかな?言うても徒歩3分ぐらいの距離でそんなこと起きるかなぁと思ったり。
http クライアントのリトライ機能⌗
結論から言うと go-retryablehttp を使ってすぐできた。自分で作ってもよかったのだけど、retryablehttp がシンプルで私の求めている機能そのものにみえたのでこのライブラリを採用した。既存の http クライアントの機能を次の2箇所変更するだけで retryablehttp が使える。こういうインテグレーションの簡単さも嬉しい。ちゃんとバックオフとジッターの機能も実装しているし、デフォルトのそれらの機能をカスタムで置き換えることもできる。最低限のリトライ機能があればいいといった http クライアントならこれでよいと思う。こういうシンプルで使い勝手のよいライブラリをみつけると嬉しくなる。
- res, err := c.raw.Do(req)
+ _req, err := retryablehttp.FromRequest(req)
+ if err != nil {
+ return []byte{}, fmt.Errorf("failed to create retryable request: %w", err)
+ }
+ res, err := c.raw.Do(_req)
+func NewRetryableClient(cfg config.Client) *retryablehttp.Client {
+ c := retryablehttp.NewClient()
+ c.Logger = log.GetLogger()
+ c.RetryWaitMin = cfg.RetryWaitMin
+ c.RetryWaitMax = cfg.RetryWaitMax
+ c.RetryMax = cfg.RetryMax
+ return c
+}
- raw: http.DefaultClient,
+ raw: NewRetryableClient(cfg),
Read other posts