As in http.Client al dield wurdt troch tagelyk oanfragen, hâld syn Transport-fjild stabyl. In omklaaiing kin syngronisearje hokker folslein konfigurearre ferfier elke folgjende reis krijt:

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

Brûk net/http en sync en initialisearje it foardat de klant publisearre wurdt:

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

slot.Set(nextTransport)

initialTransport en nextTransport moatte net-nil, folslein konfigurearre en tagelyk feilige reisútfierders wêze. Bou elk proxyferfier foardat it publisearre wurdt, en lit de konfiguraasje ûnferoare wylst oanfragen it brûke.

It slot beskermet allinnich de wizer-snapshot, dus in trage oanfraach hâldt it routing-slot net by syn hiele netwurkútwikseling. In oanfraach dy't al de foarige snapshot brûkt, giet troch op dat ferfier; de wiksel werhellet it net en ferpleatst syn ferbining net.

Hâld âlde ferfieren oan en ûntslach se troch de beheinde libbenssyklus fan 'e applikaasje, lit wurk dat rint ôfmeitsje en slút idle pools as dat past. In troerstjoer kin nei in wiksel noch in RoundTrip feroarsaakje. As in hiel workflow ien rûte nedich hat, wize dy rûte oan by de grins fan it workflow ynstee fan dizze dielde selektor healwei te feroarjen.

Relatearre artikelen