Paralelni Java zahtjevi mogu dijeliti pogrešne proxy postavke
Održite paralelne Java zahtjeve na predviđenim rutama bez mijenjanja dijeljenih JVM proxy postavki.
Jedna dretva postavlja proxy svojstvo, šalje zahtjev i vraća staru vrijednost. Druga dretva čini isto s drugim proxyjem. Kod izgleda uredno kad se čita odozgo prema dolje, ali obje dretve mijenjaju dijeljeno stanje JVM-a.
System.setProperty() mijenja sistemsko svojstvo za proces. Ono ne pridružuje rutu dretvi koja ga je pozvala. Paralelni zahtjev može vidjeti vrijednost zapisanu za tuđi posao, a postojeći klijent možda je već preuzeo vlastitu konfiguraciju.
Učinite rutu dijelom klijenta
Za Javin HTTP klijent stvarajte klijente s namjernim proxy selektorima. Držite odvojene klijente kada radni zadaci 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.
Metoda proxy graditelja bilježi odabir na razini klijenta. To politiku čini lakšom za pregled od niza globalnih zapisa omotanih oko asinkronih operacija.
Globalne postavke još uvijek imaju svrhu
Jedna proxy politika na razini cijelog JVM-a može biti prikladna kada svi uključeni klijenti trebaju slijediti je. Postavite je 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 paralelno č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.