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.

Kapcsolódó cikkek