Samanaikaiset Java-pyynnöt voivat jakaa väärät välityspalvelinasetukset
Pidä samanaikaiset Java-pyynnöt aiotuilla reiteillään vaihtamatta jaettuja JVM:n välityspalvelinasetuksia.
Yksi säie asettaa välityspalvelinominaisuuden, tekee pyynnön ja palauttaa vanhan arvon. Toinen säie tekee saman toisella välityspalvelimella. Koodi näyttää siistiltä ylhäältä alas luettuna, mutta molemmat säikeet muuttavat jaettua JVM:n tilaa.
System.setProperty() muuttaa prosessin järjestelmäominaisuutta. Se ei liitä reittiä sitä kutsuneeseen säikeeseen. Samanaikainen pyyntö voi nähdä arvon, joka on kirjoitettu jonkun toisen työtä varten, ja olemassa oleva asiakas on ehkä jo tallentanut oman kokoonpanonsa.
Tee reitistä osa asiakasta
Javan HTTP-asiakkaalle luo asiakkaita tarkoituksellisilla välityspalvelimen valitsimilla. Pidä asiakkaat erillään, kun työkuormat vaativat erilaisia reitityskäytäntöjä:
HttpClient client = HttpClient.newBuilder()
.proxy(ProxySelector.of(
new InetSocketAddress("203.0.113.10", 8080)))
.connectTimeout(Duration.ofSeconds(5))
.build();
Tuonnit ovat java.net, java.net.http ja java.time. Osoite on havainnollistava; sallituissa julkisten reittien testeissä HTTP-välityspalvelinluettelo tarjoaa ehdokaspäätepisteitä. Määritä pyyntöjen määräajat ja välityspalvelimen todennus erikseen sovelluksen tarpeiden mukaan.
Rakentajan proxy-metodi tallentaa valinnan asiakastasolla. Se tekee käytännöstä helpommin tarkasteltavan kuin sarja globaaleja kirjoituksia, jotka on kääritty asynkronisten toimintojen ympärille.
Globaaleilla asetuksilla on yhä käyttöä
Yksi koko JVM:n laajuinen välityspalvelinkäytäntö voi olla sopiva, kun kaikkien osallistuvien asiakkaiden on tarkoitus noudattaa sitä. Aseta käytäntö sovelluksen käynnistyksessä ja varmista, mitkä kirjastot noudattavat sitä.
Ongelmia syntyy, kun globaaleja ominaisuuksia käytetään yksittäisten pyyntöjen väliaikaisena kytkimenä. Palvelimessa taustatyöntekijät ja kirjastokutsut voivat toimia samanaikaisesti, vaikka oma metodisi näyttäisi synkroniselta. Pidä reititystila yhteyden omistavan asiakkaan tai liittimen luona, jotta toinen pyyntö ei voi muuttaa sitä kesken työn.