Бирач може савршено кружити и ипак стално бирати први прокси. Грешка је случајно стварање новог бирача за сваки захтев, што ресетује његов бројач пре него што стигне да направи други избор.

Конструишите бирач једном и задржите га уз транспорт. Листа HTTP проксија може дати јавне HTTP кандидате за скуп URL-ова када захтеви дозвољавају јавне посреднике. Почните са већ провереном, непразном листом URL-ова проксија:

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

Околна апликација мора одбити празну листу, проверити URL-ове и користити уобичајене увозе net/http, net/url и sync. Листа би требало да остане непромењена док је овај бирач користи или да буде замењена кроз посебно синхронизован дизајн.

Причврстите враћену функцију на један задржани http.Transport. Mutex штити редослед избора кроз истовремене повратне позиве. Не захтева држање браве док се спори мрежни захтев завршава.

Не трошите руту само да бисте је исписали

Поновни позив бирача ради дијагностичке поруке поново помера бројач. Тај излаз може описати следећег кандидата уместо кандидата који је користио захтев који истражујете. Забележите избор унутар стварног повратног позива са безбедним идентификатором крајње тачке.

Позив повратног позива није доказ да је захтев успешно достављен. Преусмеравања или додатни покушаји транспорта могу закомпликовати једноставну претпоставку „један позив апликације, један избор“. Ако радни ток мора задржати једну руту кроз неколико операција, изаберите ту руту на граници радног тока уместо коришћења глобалног ротирајућег повратног позива.

Кружење такође не обећава различите јавне излазе. Оно планира крајње тачке. Коначни идентитет остаје својство пута који пружа свака крајња тачка.

Повезани чланци