Një thread vendos një veti proxy, bën një kërkesë dhe rikthen vlerën e vjetër. Një thread tjetër bën të njëjtën gjë me një proxy tjetër. Kodi duket i rregullt kur lexohet nga lart poshtë, por të dy thread-at po ndryshojnë gjendjen e përbashkët të JVM.

System.setProperty() ndryshon një veti të sistemit për procesin. Nuk i bashkëngjit një rrugë thread-it që e thirri. Një kërkesë e njëkohshme mund të shohë një vlerë të shkruar për punën e dikujt tjetër, dhe një klient ekzistues mund të ketë kapur tashmë konfigurimin e vet.

Bëjeni rrugën pjesë të klientit

Për klientin HTTP të Java-s, krijoni klientë me përzgjedhës proxy të qëllimshëm. Mbani klientë të veçantë kur ngarkesat e punës kërkojnë politika të ndryshme rrugëtimi:

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

Importet janë java.net, java.net.http dhe java.time. Adresa është ilustruese; për testet e lejuara të rrugëve publike, lista e proxy-ve HTTP ofron pika fundore kandidate. Afatet e kërkesave dhe vërtetimi i proxy-t konfigurojini veçmas sipas nevojave të aplikacionit.

metoda proxy e ndërtuesit regjistron një zgjedhje në nivel klienti. Kjo e bën politikën më të lehtë për t'u inspektuar sesa një sekuencë shkrimesh globale të mbështjella rreth operacioneve asinkrone.

Cilësimet globale kanë ende përdorim

Një politikë e vetme proxy për të gjithë JVM mund të jetë e përshtatshme kur çdo klient pjesëmarrës synohet ta ndjekë atë. Vendoseni atë politikë në nisjen e aplikacionit dhe verifikoni cilat biblioteka e respektojnë.

Problemet lindin kur vetitë globale përdoren si ndërprerës i përkohshëm për kërkesa individuale. Në një server, punëtorët e sfondit dhe thirrjet e bibliotekave mund të ekzekutohen njëkohësisht edhe nëse metoda juaj duket sinkrone. Mbani gjendjen e rrugëtimit me klientin ose lidhësin që zotëron lidhjen, që një kërkesë tjetër të mos e ndryshojë në mes të punës.

Artikuj të ngjashëm