首頁 > 後端開發 > Golang > GoLang 的 `http.DefaultClient.Do(req)` 是否會在伺服器無法使用時自動重試 HTTP 請求?

GoLang 的 `http.DefaultClient.Do(req)` 是否會在伺服器無法使用時自動重試 HTTP 請求?

Patricia Arquette
發布: 2024-10-30 14:34:50
原創
1107 人瀏覽過

Does GoLang's `http.DefaultClient.Do(req)` Automatically Retry HTTP Requests on Server Unavailability?

HTTP 請求重試機制

問題:

在GoLangang 中,執行GoLang DefaultClient 時.Do(req),如果伺服器暫時不可用,HTTP請求嘗試是否會自動重試?

答案:

否,GoLang HTTP客戶端沒有實現自動重試重試。您需要實作自訂重試機制來處理伺服器不可用的情況。

重試模式實現:

以下是您可以實現的基本重試模式的範例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

<code class="go">package main

 

import (

    "fmt"

    "io/ioutil"

    "log"

    "net/http"

)

 

func main() {

    var (

        err      error

        response *http.Response

        retries  int = 3

    )

 

    for retries > 0 {

        response, err = http.Get("https://non-existent") // Replace with your server URL

 

        if err != nil {

            log.Println("Request failed", err)

            retries -= 1

        } else {

            break // Request succeeded, exit the retry loop

        }

    }

 

    if response != nil {

        defer response.Body.Close()

        data, err := ioutil.ReadAll(response.Body)

        if err != nil {

            log.Fatal(err)

        }

        fmt.Printf("Data received: %s", data)

    } else {

        log.Fatal("Unable to establish connection")

    }

}</code>

登入後複製

在此範例中, http.Get 請求在循環中執行,嘗試從伺服器取得資料。如果請求失敗,循環將減少重試計數並繼續,直到所有重試都用盡或請求成功。如果請求成功,則列印回應。如果所有重試都失敗,則會記錄錯誤訊息。

以上是GoLang 的 `http.DefaultClient.Do(req)` 是否會在伺服器無法使用時自動重試 HTTP 請求?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板