Jedno vlákno nastaví vlastnosť proxy, odošle požiadavku a obnoví starú hodnotu. Iné vlákno urobí to isté s iným proxy. Kód vyzerá pri čítaní zhora nadol usporiadane, ale obe vlákna menia zdieľaný stav JVM.

System.setProperty() mení systémovú vlastnosť pre proces. Nepripája trasu k vláknu, ktoré ju zavolalo. Súbežná požiadavka môže vidieť hodnotu zapísanú pre prácu niekoho iného a existujúci klient už mohol zachytiť vlastnú konfiguráciu.

Urobte trasu súčasťou klienta

Pre HTTP klienta Javy vytvárajte klientov s zámernými selektormi proxy. Keď pracovné zaťaženia vyžadujú odlišné politiky smerovania, držte klientov oddelene:

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

Importy sú java.net, java.net.http a java.time. Adresa je ilustratívna; pre povolené testy verejných trás zoznam HTTP proxy poskytuje kandidátske koncové body. Termíny požiadaviek a overenie proxy nakonfigurujte samostatne podľa potrieb aplikácie.

metóda proxy v builderi zaznamenáva voľbu na úrovni klienta. To robí politiku ľahšie kontrolovateľnou než sled globálnych zápisov obalených okolo asynchrónnych operácií.

Globálne nastavenia majú stále využitie

Jedna politika proxy pre celú JVM môže byť vhodná, keď ju má dodržiavať každý zúčastnený klient. Nastavte tú politiku pri štarte aplikácie a overte, ktoré knižnice ju rešpektujú.

Problémy vznikajú, keď sa globálne vlastnosti používajú ako dočasný prepínač pre jednotlivé požiadavky. Na serveri môžu pozadia a volania knižníc bežať súbežne, aj keď sa vaša metóda javí ako synchrónna. Držte stav smerovania pri klientovi alebo konektore, ktorý vlastní pripojenie, aby ho iná požiadavka nemohla zmeniť v polovici práce.

Súvisiace články