A párhuzamos Java-kérések rossz proxybeállításokat oszthatnak meg
Tartsa a párhuzamos Java-kéréseket a szándékolt útvonalakon anélkül, hogy a megosztott JVM-proxybeállításokat váltogatná.
Az egyik szál beállít egy proxy tulajdonságot, kérést küld, majd visszaállítja a régi értéket. Egy másik szál ugyanezt teszi egy másik proxyval. A kód fentről lefelé olvasva rendesnek tűnik, de mindkét szál a JVM megosztott állapotát változtatja.
System.setProperty() egy rendszertulajdonságot változtat meg a folyamat számára. Nem rendel útvonalat ahhoz a szálhoz, amely meghívta. Egy párhuzamos kérés olyan értéket láthat, amelyet valaki más munkájához írtak, és egy meglévő kliens már elkaphatta a saját konfigurációját.
Tegye az útvonalat a kliens részévé
A Java HTTP-klienseihez hozzon létre klienseket szándékos proxyválasztókkal. Tartson külön klienseket, amikor a munkaterhelések eltérő útválasztási szabályzatokat igényelnek:
HttpClient client = HttpClient.newBuilder()
.proxy(ProxySelector.of(
new InetSocketAddress("203.0.113.10", 8080)))
.connectTimeout(Duration.ofSeconds(5))
.build();
Az importok: java.net, java.net.http és java.time. A cím szemléltető; az engedélyezett nyilvános útvonal-tesztekhez a HTTP-proxylista jelölt végpontokat kínál. A kérési határidőket és a proxyhitelesítést külön állítsa be az alkalmazás igényei szerint.
A builder proxy metódusa kliensszintű választást rögzít. Ez könnyebben ellenőrizhetővé teszi a szabályzatot, mint az aszinkron műveletek köré csavart globális írások sorozata.
A globális beállításoknak még mindig van hasznuk
Egyetlen, a teljes JVM-re kiterjedő proxyszabályzat akkor lehet megfelelő, ha minden részt vevő kliensnek azt kell követnie. Állítsa be ezt a szabályzatot az alkalmazás indításakor, és ellenőrizze, mely könyvtárak tartják tiszteletben.
Problémák akkor merülnek fel, amikor a globális tulajdonságokat egyedi kérések ideiglenes kapcsolójaként használják. Egy kiszolgálón a háttérfeldolgozók és a könyvtárhívások párhuzamosan futhatnak, még akkor is, ha a saját metódusa szinkronnak tűnik. Tartsa az útválasztási állapotot annál a kliensnél vagy csatlakozónál, amely a kapcsolatot birtokolja, hogy egy másik kérés ne változtathassa meg a munka közepén.