Viena gija nustato tarpinio serverio savybę, atlieka užklausą ir atkuria seną reikšmę. Kita gija daro tą patį su kitu tarpiniu serveriu. Skaitydamas iš viršaus į apačią kodas atrodo tvarkingas, bet abi gijos keičia bendrą JVM būseną.

System.setProperty() pakeičia proceso sistemos savybę. Jis nepriskiria maršruto gijai, kuri jį iškvietė. Lygiagreti užklausa gali matyti reikšmę, įrašytą kito darbo reikmėms, o esamas klientas galbūt jau užfiksavo savo konfigūraciją.

Padarykite maršrutą kliento dalimi

Java HTTP klientui kurkite klientus su tyčiniais tarpinio serverio parinkikliais. Laikykite atskirus klientus, kai darbams reikia skirtingų maršrutizavimo politikų:

HttpClient client = HttpClient.newBuilder()
    .proxy(ProxySelector.of(
        new InetSocketAddress("203.0.113.10", 8080)))
    .connectTimeout(Duration.ofSeconds(5))
    .build();

Importai yra java.net, java.net.http ir java.time. Adresas iliustracinis; leidžiamiems viešojo maršruto bandymams HTTP tarpinių serverių sąrašas pateikia kandidatų galinius taškus. Užklausų terminus ir tarpinio serverio autentifikavimą konfigūruokite atskirai pagal programos poreikius.

Kūrėjo proxy metodas įrašo kliento lygio pasirinkimą. Tai leidžia politiką patikrinti lengviau nei globalių įrašymų seką, apgaubiančią asinchronines operacijas.

Globalūs nustatymai vis dar turi paskirtį

Viena visai JVM taikoma tarpinio serverio politika gali būti tinkama, kai kiekvienas dalyvaujantis klientas turi jos laikytis. Nustatykite tą politiką programos paleidimo metu ir patikrinkite, kurios bibliotekos ją gerbia.

Problemų kyla, kai globalios savybės naudojamos kaip laikinas jungiklis atskiroms užklausoms. Serveryje foniniai darbininkai ir bibliotekų iškvietimai gali veikti lygiagrečiai, net jei jūsų metodas atrodo sinchroninis. Laikykite maršrutizavimo būseną kliente arba jungtyje, kuri valdo ryšį, kad kita užklausa negalėtų jos pakeisti darbo viduryje.

Susiję straipsniai