亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

http 重試請求超時 (408)

http 重試請求超時 (408)

Go
長風秋雁 2022-09-19 10:39:46
使用哈??破諑?(https://github.com/hashicorp/go-retryablehttpgo-retryablehttp)它會自動對所有代碼重試:5xx可重試http 在某些條件下執行自動重試。主要是,如果客戶端返回錯誤(連接錯誤等),或者如果收到500范圍的響應代碼(501除外),則在等待一段時間后調用重試。否則,將返回響應并留給調用方進行解釋。這是否可能重試,例如在http狀態代碼上只是ootb?或者我應該構建一些自定義包裝器?Request Timeout408
查看完整描述

2 回答

?
largeQ

TA貢獻2039條經驗 獲得超8個贊

您可以實現自己的重試策略,并將其傳遞到“客戶端”字段。

文檔參考:

代碼參考:

代碼可能類似于

package main


import (

    "context"

    "net/http"


    "github.com/hashicorp/go-retryablehttp"

)


func main() {


    retryClient := retryablehttp.NewClient()

    retryClient.RetryMax = 10

    retryClient.CheckRetry = func(ctx context.Context, resp *http.Response, err error) (bool, error) {

        ok, e := retryablehttp.DefaultRetryPolicy(ctx, resp, err)

        if !ok && resp.StatusCode == http.StatusRequestTimeout {

            return true, nil 

            // return true for a retry, 

            // if e is nil,

            // you might want to populate that error 

            // to propagate it.

            // see https://github.com/hashicorp/go-retryablehttp/blob/02c1586c8f14be23e7eeb522f1094afbabf45e93/client.go#L673

        }

        return ok, e

    }

}


查看完整回答
反對 回復 2022-09-19
?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

正如源代碼在文件 client.go 的第 354 行中指定的那樣,您可以將該函數配置為在任何自定義方案中重試。CheckRetry


    // CheckRetry specifies the policy for handling retries, and is called

    // after each request. The default policy is DefaultRetryPolicy.

    CheckRetry CheckRetry

您只需要在下面的類型中編寫一個函數,并使用該自定義實現進行配置。retryablehttp.Client.CheckRetry


type CheckRetry func(ctx context.Context, resp *http.Response, err error) (bool, error)


查看完整回答
反對 回復 2022-09-19
  • 2 回答
  • 0 關注
  • 238 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號