Samaaegsed Java-päringud võivad jagada vale puhverserveri seadeid
Hoidke samaaeegsed Java-päringud kavandatud marsruutidel ilma jagatud JVM-i puhverserveri seadeid vahetamata.
Üks lõim seab puhverserveri omaduse, teeb päringu ja taastab vana väärtuse. Teine lõim teeb sama teise puhverserveriga. Kood näeb ülalt alla lugedes korras välja, kuid mõlemad lõimed muudavad jagatud JVM-i olekut.
System.setProperty() muudab protsessi süsteemiomadust. See ei seo marsruuti lõimega, mis selle kutsus. Samaaegne päring võib näha väärtust, mis on kirjutatud kellegi teise töö jaoks, ja olemasolev klient võib olla juba oma konfiguratsiooni talletanud.
Tee marsruut kliendi osaks
Java HTTP-kliendi jaoks looge kliendid teadlike puhverserveri valijatega. Hoidke eraldi kliente, kui töökoormused nõuavad erinevaid marsruutimispoliitikaid:
HttpClient client = HttpClient.newBuilder()
.proxy(ProxySelector.of(
new InetSocketAddress("203.0.113.10", 8080)))
.connectTimeout(Duration.ofSeconds(5))
.build();
Impordid on java.net, java.net.http ja java.time. Aadress on näitlik; lubatud avalike marsruutide testide jaoks pakub HTTP puhverserverite loend kandidaat-lõpppunkte. Seadistage päringutähtajad ja puhverserveri autentimine eraldi vastavalt rakenduse vajadustele.
Ehitaja puhverserveri meetod salvestab valiku kliendi tasandil. See muudab poliitika kergemini kontrollitavaks kui asünkroonsete toimingute ümber mähitud globaalsete kirjutuste jada.
Globaalsetel seadetel on siiski kasutust
Üks kogu JVM-i hõlmav puhverserveri poliitika võib olla asjakohane, kui kõik osalevad kliendid peaksid seda järgima. Määrake see poliitika rakenduse käivitamisel ja kontrollige, millised teegid seda austavad.
Probleemid tekivad siis, kui globaalseid omadusi kasutatakse üksikute päringute ajutise lülitina. Serveris võivad taustatöötajad ja teegikutsed töötada samaaeegselt isegi siis, kui teie meetod tundub sünkroonne. Hoidke marsruutimisolekut kliendi või konnektori juures, kellele ühendus kuulub, et teine päring ei saaks seda töö poolel muuta.