Ang magkasabay na Java request ay maaaring magbahagi ng maling proxy settings
Panatilihin ang magkasabay na Java request sa kanilang nilalayong ruta nang hindi binabago ang pinagsasaluhang proxy settings ng JVM.
Isang thread ang nagtatakda ng proxy property, gumagawa ng request, at ibinabalik ang dating halaga. Isa pang thread ang gumagawa ng pareho sa ibang proxy. Mukhang maayos ang code kapag binasa mula itaas pababa, ngunit binabago ng dalawang thread ang pinagsasaluhang estado ng JVM.
Binabago ng System.setProperty() ang system property para sa proseso. Hindi ito naglalakip ng ruta sa thread na tumawag dito. Maaaring makita ng magkasabay na request ang halagang isinulat para sa gawain ng iba, at ang umiiral na client ay maaaring nakunan na ang sarili nitong configuration.
Gawing bahagi ng client ang ruta
Para sa HTTP client ng Java, gumawa ng mga client na may sinadyang proxy selector. Panatilihing hiwalay ang mga client kapag kailangan ng mga workload ang magkaibang patakaran sa ruta:
HttpClient client = HttpClient.newBuilder()
.proxy(ProxySelector.of(
new InetSocketAddress("203.0.113.10", 8080)))
.connectTimeout(Duration.ofSeconds(5))
.build();
Ang mga import ay java.net, java.net.http, at java.time. Ilustratibo ang address; para sa pinapayagang pagsubok ng pampublikong ruta, ang listahan ng HTTP proxy ay nagbibigay ng mga kandidatong endpoint. I-configure nang hiwalay ang mga deadline ng request at proxy authentication ayon sa pangangailangan ng application.
Ang proxy method ng builder ay nagtatala ng pagpipilian sa antas ng client. Ginagawa nitong mas madaling siyasatin ang patakaran kaysa sa sunod-sunod na global na pagsulat na nakabalot sa mga asynchronous na operasyon.
May gamit pa rin ang global na settings
Ang isang patakaran ng proxy para sa buong JVM ay maaaring angkop kapag ang bawat kalahok na client ay nilalayong sumunod dito. Itakda ang patakarang iyon sa pagsisimula ng application at tiyakin kung aling mga library ang gumagalang dito.
Lumilitaw ang mga problema kapag ginagamit ang global na property bilang pansamantalang switch para sa indibidwal na request. Sa isang server, ang mga background worker at tawag sa library ay maaaring tumakbo nang sabay kahit mukhang synchronous ang iyong method. Panatilihin ang estado ng ruta sa client o connector na nagmamay-ari ng koneksyon, upang hindi ito mabago ng ibang request sa kalagitnaan ng gawain.