>백엔드 개발 >Golang >GoLang의 `http.DefaultClient.Do(req)`는 서버를 사용할 수 없을 때 HTTP 요청을 자동으로 재시도합니까?

GoLang의 `http.DefaultClient.Do(req)`는 서버를 사용할 수 없을 때 HTTP 요청을 자동으로 재시도합니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-30 14:34:50993검색

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

HTTP 요청 재시도 메커니즘

질문:

GoLang에서 http.DefaultClient를 실행할 때 .Do(req), 서버를 일시적으로 사용할 수 없는 경우 HTTP 요청이 자동으로 재시도를 시도합니까?

답변:

아니요, GoLang HTTP 클라이언트는 자동을 구현하지 않습니다. 재시도. 서버를 사용할 수 없는 경우를 처리하려면 사용자 정의 재시도 메커니즘을 구현해야 합니다.

재시도 패턴 구현:

구현할 수 있는 기본 재시도 패턴의 예는 다음과 같습니다.

<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으로 문의하세요.