Izbirnik lahko popolnoma kroži in še vedno izbira prvi posredniški strežnik. Napaka je v tem, da se za vsako zahtevo pomotoma ustvari nov izbirnik, kar ponastavi njegov števec, preden ima drugo izbiro.

Zgradite izbirnik enkrat in ga obdržite skupaj s transportom. Seznam posredniških strežnikov HTTP lahko zagotovi javne kandidate HTTP za nabor URL, ko zahteve dovoljujejo javne posrednike. Začnite z že preverjenim, nepraznim seznamom URL posredniških strežnikov:

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

Okoliška aplikacija mora zavrniti prazen seznam, preveriti URL-je in uporabiti običajne uvoze net/http, net/url in sync. Seznam bi moral ostati nespremenjen, dokler ga ta izbirnik uporablja, ali pa biti zamenjan s posebej sinhronizirano zasnovo.

Prilepite vrnjeno funkcijo na enega obdržanega http.Transport. Mutex ščiti zaporedje izbire med sočasnimi povratnimi klici. Ne zahteva držanja zaklepa, medtem ko se počasna omrežna zahteva zaključuje.

Ne porabite poti samo zato, da bi jo natisnili

Ponoven klic izbirnika za diagnostično sporočilo spet premakne števec. Ta izhod lahko opiše naslednjega kandidata namesto kandidata, ki ga je uporabila zahteva, ki jo preiskujete. Zabeležite izbiro znotraj pravega povratnega klica z varnim identifikatorjem končne točke.

Klic povratnega klica ni dokaz, da je bila zahteva uspešno dostavljena. Preusmeritve ali dodatni poskusi transporta lahko zapletejo preprosto predpostavko »en klic aplikacije, ena izbira«. Če mora delovni tok ohraniti eno pot skozi več operacij, izberite to pot na meji delovnega toka, namesto da uporabite globalni vrteči povratni klic.

Kroženje prav tako ne obljublja različnih javnih izhodov. Razporeja končne točke. Končna identiteta ostaja lastnost poti, ki jo zagotavlja vsaka končna točka.

Sorodni članki