Jedna nit postavlja proxy svojstvo, šalje zahtjev i vraća staru vrijednost. Druga nit čini isto s drugim proxyjem. Kod izgleda uredno kada se čita odozgo prema dolje, ali obje niti mijenjaju dijeljeno stanje JVM-a.

System.setProperty() mijenja sistemsko svojstvo za proces. Ono ne pripaja rutu niti koja ga je pozvala. Paralelni zahtjev može vidjeti vrijednost zapisanu za nečiji drugi 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 kandidatske krajnje točke. Rokove zahtjeva i proxy autentifikaciju konfigurirajte odvojeno prema potrebama aplikacije.

Metoda proxy graditelja bilježi izbor 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 treba da je slijede. 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 serveru pozadinski radnici i pozivi biblioteka mogu raditi paralelno čak i ako vaša metoda izgleda sinhrono. Držite stanje usmjeravanja uz klijent ili konektor koji posjeduje vezu, kako ga drugi zahtjev ne bi mogao promijeniti na pola posla.

Povezani članci