Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Minta mekanisme cuba semula dan penggunaan http.Transport dalam bahasa Go

Minta mekanisme cuba semula dan penggunaan http.Transport dalam bahasa Go

王林
王林asal
2023-07-22 09:57:311448semak imbas

http.Bahasa Pengangkutan dalam Go ialah perpustakaan permintaan rangkaian yang sangat berkuasa yang menyediakan mekanisme percubaan semula permintaan yang fleksibel, yang boleh membantu kami mencuba semula secara automatik apabila permintaan rangkaian gagal meningkatkan kadar kejayaan permintaan. Artikel ini akan memperkenalkan mekanisme percubaan semula permintaan dan penggunaan http.Transport, dan memberikan contoh kod.

1. Meminta mekanisme cuba semula http.Transport

http.Transport ialah perpustakaan permintaan rangkaian HTTP yang dibina dalam bahasa Go. Ia menyediakan set fungsi dan item konfigurasi yang sangat kaya, termasuk mekanisme cuba semula.

Secara lalai, http.Transport akan mencuba semula permintaan secara automatik. Syarat untuk mencuba semula automatik ialah:

  1. Ralat rangkaian berlaku, seperti tamat masa sambungan, gangguan sambungan, dsb.
  2. Pelayan mengembalikan kod status 5xx.

Selain itu, http.Transport juga menyediakan beberapa fungsi cuba semula tambahan, yang boleh dikonfigurasikan dengan menetapkan sifatnya Butirannya adalah seperti berikut:

  1. MaxIdleConnsPerHost: Tentukan bilangan maksimum sambungan terbiar bagi setiap hos, lalai ialah 2. ;
  2. MaxIdleConns: Menentukan bilangan maksimum sambungan melahu untuk keseluruhan objek Pengangkutan, lalai ialah 100
  3. IdleConnTimeout: Menentukan tempoh sambungan akan ditutup secara automatik selepas ia tidak digunakan, lalai ialah 90 saat;
  4. DisableKeepAlives: digunakan untuk melumpuhkan fungsi keep-alive, jika ditetapkan kepada benar, sambungan baharu akan dibuat dengan setiap permintaan.
2. Cara menggunakan http.Transport

Menggunakan http.Transport untuk mencuba semula permintaan adalah sangat mudah Anda hanya perlu mencipta objek http.Client dan menetapkan sifat Transportnya kepada objek http.Transport. Contohnya adalah seperti berikut:

package main

import (
    "fmt"
    "net/http"
    "time"
)

func main() {
    // 创建一个带重试机制的http.Client对象
    client := &http.Client{
        Transport: &http.Transport{
            // 设置连接超时时间为5秒
            DialTimeout: 5 * time.Second,
            // 自动重试一次请求
            MaxRetries: 1,
        },
    }

    // 发送GET请求
    resp, err := client.Get("https://www.example.com")
    if err != nil {
        fmt.Println("请求失败:", err)
        return
    }
    defer resp.Body.Close()

    // 处理响应
    // ...
}

Dalam contoh di atas, kami mencipta objek http.Client tersuai dan menetapkan sifat Pengangkutannya kepada objek http.Transport tersuai. Dalam sifat objek http.Transport, kami menetapkan DialTimeout kepada 5 saat, yang bermaksud tamat masa sambungan ialah 5 saat kami menetapkan MaxRetries kepada 1, yang bermaksud permintaan itu dicuba semula secara automatik.

3. Ringkasan

Artikel ini memperkenalkan mekanisme percubaan semula permintaan dan penggunaan http.Transport dalam bahasa Go. Dengan menetapkan sifat objek http.Transport, kami boleh menyesuaikan bilangan dan syarat percubaan semula permintaan, serta konfigurasi lain yang berkaitan. Menggunakan fungsi ini boleh membantu kami mencuba semula permintaan secara automatik apabila permintaan rangkaian gagal dan meningkatkan kadar kejayaan permintaan tersebut.

Secara umumnya, http.Transport in Go menyediakan fungsi permintaan semula permintaan yang sangat fleksibel dan berkuasa, yang sangat sesuai untuk senario permintaan rangkaian serentak tinggi. Saya harap artikel ini berguna kepada anda, terima kasih kerana membaca!

Atas ialah kandungan terperinci Minta mekanisme cuba semula dan penggunaan http.Transport dalam bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn