Jedna nit postavi proxy svojstvo, pošalje zahtjev i vrati staru vrijednost. Druga nit učini isto s drugim proxyjem. Kod izgleda uredno kad se čita odozgo prema dolje, ali obje niti mijenjaju zajedničko JVM stanje.

System.setProperty() mijenja sistemsko svojstvo za proces. Ono ne pripaja rutu niti koja ga je pozvala. Uporedni zahtjev može vidjeti vrijednost napisanu za tuđi posao, a postojeći klijent možda je već zabilježio vlastitu konfiguraciju.

Učinite rutu dijelom klijenta

Za Javin HTTP klijent stvarajte klijente s namjernim proxy selektorima. Držite odvojene klijente kada radna opterećenja zahtijevaju različite politike usmjeravanja:

HttpClient client = HttpClient.newBuilder()
    .proxy(ProxySelector.of(
        new InetSocketAddress("203.0.113.10", 8080)))
    .connectTimeout(Duration.ofSeconds(5))
    .build();

Uvozi su java.net, java.net.http i java.time. Adresa je ilustrativna; za dopuštene testove javnih ruta popis HTTP proxyja nudi kandidatne krajnje točke. Rokove zahtjeva i proxy autentifikaciju konfigurirajte odvojeno prema potrebama aplikacije.

proxy metoda graditelja bilježi izbor na razini klijenta. To politiku čini lakšom za pregled od niza globalnih upisa omotanih oko asinkronih operacija.

Globalne postavke još uvijek imaju svrhu

Jedna proxy politika za cijeli JVM može biti prikladna kada je namjera da je slijedi svaki uključeni klijent. Postavite tu politiku pri pokretanju aplikacije i provjerite koje je biblioteke poštuju.

Problemi nastaju kada se globalna svojstva koriste kao privremeni prekidač za pojedinačne zahtjeve. Na poslužitelju pozadinski radnici i pozivi biblioteka mogu raditi uporedno čak i ako vaša metoda izgleda sinkrono. Držite stanje usmjeravanja uz klijent ili konektor koji posjeduje vezu, kako ga drugi zahtjev ne bi mogao promijeniti na pola posla.

Povezani članci