http.Client bat aldi bereko eskaerek jada partekatzen badute, mantendu haren Transport eremua egonkor. Bilgarri batek sinkroniza dezake zein garraio erabat konfiguratuk jasotzen duen hurrengo joan-etorri bakoitzak:

type routeSlot struct {
    mu sync.RWMutex
    current http.RoundTripper
}

func (s *routeSlot) RoundTrip(r *http.Request) (*http.Response, error) {
    s.mu.RLock()
    current := s.current
    s.mu.RUnlock()
    return current.RoundTrip(r)
}

func (s *routeSlot) Set(next http.RoundTripper) {
    s.mu.Lock()
    s.current = next
    s.mu.Unlock()
}

net/http eta sync erabiliz, hasieratu ezazu bezeroa argitaratu aurretik:

slot := &routeSlot{current: initialTransport}
client := &http.Client{Transport: slot}

slot.Set(nextTransport)

initialTransport eta nextTransport ez-nil, erabat konfiguratutako eta konkurrentziarekiko seguruak diren joan-etorrien exekutatzaileak izan behar dira. Eraiki proxy garraio bakoitza argitaratu aurretik, eta utzi haren konfigurazioa aldatu gabe eskaerek erabiltzen duten bitartean.

Blokeoak erakuslearen snapshot-a bakarrik babesten du, beraz eskaera geldo batek ez du bideratze-blokeoa mantentzen bere sare-trukaketa osoan. Aurreko snapshot-a erabiltzen duen eskaera garraio horretan jarraitzen du; aldaketak ez du berriro exekutatzen ez eta haren konexioa mugitzen.

Mantendu eta erretiratu garraio zaharrak aplikazioaren bizi-ziklo mugatuaren bidez, martxan dagoen lana amaitzen utziz eta alferrikako igerilekuak egoki denean itxiz. Birbideratze batek beste RoundTrip bat eragin dezake aldaketaren ondoren. Lan-fluxu oso batek bide bakarra behar badu, esleitu bide hori lan-fluxuaren mugan, hautatzaile partekatu hau erditik aldatzen ibili beharrean.

Erlazionatutako artikuluak