De ene thread stelt een proxy-eigenschap in, doet een verzoek en herstelt de oude waarde. Een andere thread doet hetzelfde met een andere proxy. De code ziet er netjes uit als je van boven naar beneden leest, maar beide threads wijzigen gedeelde JVM-status.

System.setProperty() wijzigt een systeemeigenschap voor het proces. Het koppelt geen route aan de thread die het aanriep. Een gelijktijdig verzoek kan een waarde zien die voor het werk van iemand anders is geschreven, en een bestaande client heeft zijn eigen configuratie mogelijk al vastgelegd.

Maak de route onderdeel van de client

Maak voor Java's HTTP-client clients met bewuste proxyselectors. Houd aparte clients aan wanneer workloads verschillende routeringsbeleidsregels vereisen:

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

De imports zijn java.net, java.net.http en java.time. Het adres is illustratief; voor toegestane openbare routetests levert de HTTP-proxylijst kandidaat-eindpunten. Configureer verzoekdeadlines en proxy-authenticatie apart naar de behoeften van de toepassing.

De proxy-methode van de builder legt een keuze op clientniveau vast. Daardoor is het beleid makkelijker te inspecteren dan een reeks globale schrijfacties rond asynchrone bewerkingen.

Globale instellingen hebben nog steeds nut

Eén proxybeleid voor de hele JVM kan passend zijn wanneer elke deelnemende client het geacht wordt te volgen. Stel dat beleid in bij het starten van de toepassing en controleer welke bibliotheken het respecteren.

Problemen ontstaan wanneer globale eigenschappen als tijdelijke schakelaar voor afzonderlijke verzoeken worden gebruikt. In een server kunnen achtergrondworkers en bibliotheekaanroepen gelijktijdig lopen, zelfs als je eigen methode synchroon lijkt. Houd routeringsstatus bij de client of connector die de verbinding bezit, zodat een ander verzoek die niet halverwege de taak kan wijzigen.

Gerelateerde artikelen