Ein veljar kan rotere perfekt og likevel halde fram med å velje den første proxyen. Feilen er å lage ein ny veljar ved eit uhell for kvar førespurnad, noko som nullstiller teljaren før han har eit andre val å ta.

Bygg veljaren éin gong og hald han saman med transporten. HTTP-proxylista kan levera offentlege HTTP-kandidatar for URL-settet når førespurnadene tillèt offentlege mellomledd. Start med ei allereie validert, ikkje-tom liste over proxy-URL-ar:

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
    }
}

Programmet rundt må avvise ei tom liste, validere URL-ane og bruke dei vanlege importane net/http, net/url og sync. Lista bør halde seg uforanderleg medan denne veljaren brukar ho, eller bli erstatta gjennom eit separat synkronisert design.

Knytt den returnerte funksjonen til éin halden http.Transport. Mutexen verner valsekvensen på tvers av samtidige tilbakekall. Han krev ikkje at ein lås blir halden medan ein treg nettverksførespurnad blir fullført.

Ikkje bruk opp ei rute berre for å skrive ho ut

Å kalle veljaren igjen for ei diagnostisk melding flyttar teljaren vidare igjen. Den utskrifta kan skildre neste kandidat i staden for kandidaten som førespurnaden du granskar brukte. Registrer valet inne i det verkelege tilbakekallet med ein trygg endepunktidentifikator.

Eit tilbakekall er ikkje prov på at ein førespurnad vart levert. Omdirigeringar eller ekstra transportforsøk kan komplisere ei enkel føresettnad om «eitt programkall, eitt val». Viss ein arbeidsflyt må halde éi rute gjennom fleire operasjonar, vel den ruta ved grensa til arbeidsflyten i staden for å bruke eit globalt roterande tilbakekall.

Round-robin lovar heller ikkje ulike offentlege utgangar. Det planlegg endepunkt. Den endelege identiteten blir verande ein eigenskap ved vegen kvart endepunkt leverer.

Relaterte artiklar