Egy választó tökéletesen körbeérhet, és mégis folyton az első proxyt választhatja. A hiba, hogy minden kéréshez véletlenül új választó jön létre, ami nullázza a számlálót, mielőtt második választásra kerülne sor.

A választót egyszer állítsa elő, és tartsa meg a transzport mellett. Az HTTP-proxy lista nyilvános HTTP-jelölteket adhat az URL-halmazhoz, amikor a kérések megengedik a nyilvános közvetítőket. Kezdje egy már ellenőrzött, nem üres proxy URL-listával:

func rotatingProxy(urls []*url.URL) func(*http.Request) (*url.URL, error) {
    var mu sync.Mutex
    next := 0
    return func(*http.Request) (*url.URL, error) {
        mu.Lock()
        selected := urls[next]
        next = (next + 1) % len(urls)
        mu.Unlock()
        return selected, nil
    }
}

A környező alkalmazásnak el kell utasítania az üres listát, ellenőriznie kell az URL-eket, és a szokásos net/http, net/url és sync importokat kell használnia. A listának változatlannak kell maradnia, amíg ez a választó használja, vagy külön szinkronizált tervezéssel kell lecserélni.

Csatolja a visszaadott függvényt egy megtartott http.Transport-hoz. A mutex védi a kiválasztási sorrendet az egyidejű visszahívások között. Nem igényli zár tartását, miközben egy lassú hálózati kérés befejeződik.

Ne fogyasszon el egy útvonalat csak azért, hogy kiírja

A választó újbóli meghívása diagnosztikai üzenethez ismét továbblépteti a számlálót. Az a kimenet a következő jelöltet írhatja le ahelyett, amelyet a vizsgált kérés használt. Rögzítse a kiválasztást a valódi visszahíváson belül egy biztonságos végpontazonosítóval.

Egy visszahívás meghívása nem bizonyítja, hogy a kérés sikeresen kézbesítésre került. Az átirányítások vagy a további transzportkísérletek bonyolíthatják az „egy alkalmazáshívás, egy választás” egyszerű feltevését. Ha egy munkafolyamatnak több műveleten át fenn kell tartania egy útvonalat, válassza ki ezt az útvonalat a munkafolyamat határán a globális forgó visszahívás helyett.

A körkörös váltás sem ígér különböző nyilvános kimeneteket. Végpontokat ütemez. A végső identitás továbbra is az egyes végpontok által nyújtott útvonal tulajdonsága marad.

Kapcsolódó cikkek