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 中国語 Web サイトの他の関連記事を参照してください。