Vienlaicīgi Java pieprasījumi var koplietot nepareizus starpniekservera iestatījumus
Uzziniet, kāpēc globāla rekvizīta maiņa katram pieprasījumam noplūst starp pavedieniem un kā starpniekservera politiku turēt klientā.
Viens pavediens iestata starpniekservera rekvizītu, veic pieprasījumu un atjauno veco vērtību. Cits pavediens dara to pašu ar citu starpniekserveri. Lasot no augšas uz leju, kods izskatās kārtīgs, bet abi pavedieni maina koplietoto JVM stāvokli.
System.setProperty() maina procesa sistēmas rekvizītu. Tas nepiesaista maršrutu pavedienam, kas to izsauca. Vienlaicīgs pieprasījums var redzēt vērtību, kas ierakstīta cita darba vajadzībām, un esošais klients, iespējams, jau ir fiksējis savu konfigurāciju.
Padariet maršrutu par klienta daļu
Java HTTP klientam veidojiet klientus ar apzinātiem starpniekservera atlasītājiem. Turiet atsevišķus klientus, kad darbiem nepieciešamas atšķirīgas maršrutēšanas politikas:
HttpClient client = HttpClient.newBuilder()
.proxy(ProxySelector.of(
new InetSocketAddress("203.0.113.10", 8080)))
.connectTimeout(Duration.ofSeconds(5))
.build();Importi ir java.net, java.net.http un java.time. Adrese ir ilustratīva; atļautiem publiskā maršruta testiem HTTP starpniekserveru saraksts nodrošina kandidātu galapunktus. Konfigurējiet pieprasījumu termiņus un starpniekservera autentifikāciju atsevišķi atbilstoši lietojumprogrammas vajadzībām.
Veidotāja proxy metode ieraksta klienta līmeņa izvēli. Tas ļauj politiku pārbaudīt vieglāk nekā globālu rakstīšanu virkni, kas apvij asinhronas darbības.
Globālajiem iestatījumiem joprojām ir jēga
Viena visai JVM starpniekservera politika var būt piemērota, ja katram iesaistītajam klientam ir jāievēro tā. Iestatiet šo politiku lietojumprogrammas startā un pārbaudiet, kuras bibliotēkas to ievēro.
Problēmas rodas, kad globālos rekvizītus izmanto kā pagaidu slēdzi atsevišķiem pieprasījumiem. Serverī fona darbinieki un bibliotēku izsaukumi var darboties vienlaicīgi, pat ja jūsu metode šķiet sinhrona. Turiet maršrutēšanas stāvokli klientā vai savienotājā, kuram pieder savienojums, lai cits pieprasījums nevarētu to mainīt darba vidū.