Satu urutan menetapkan sifat proksi, membuat permintaan dan memulihkan nilai lama. Urutan lain melakukan perkara sama dengan proksi berbeza. Kod kelihatan kemas apabila dibaca dari atas ke bawah, tetapi kedua-dua urutan mengubah keadaan JVM yang dikongsi.

System.setProperty() mengubah sifat sistem untuk proses itu. Ia tidak melampirkan laluan kepada urutan yang memanggilnya. Permintaan serentak boleh melihat nilai yang ditulis untuk kerja orang lain, dan klien sedia ada mungkin sudah menangkap konfigurasinya sendiri.

Jadikan laluan sebahagian daripada klien

Untuk klien HTTP Java, cipta klien dengan pemilih proksi yang disengajakan. Simpan klien berasingan apabila beban kerja memerlukan dasar penghalaan berbeza:

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

Import ialah java.net, java.net.http dan java.time. Alamat itu ilustrasi; untuk ujian laluan awam yang dibenarkan, senarai proksi HTTP membekalkan titik akhir calon. Konfigurasikan had masa permintaan dan pengesahan proksi secara berasingan mengikut keperluan aplikasi.

Kaedah proxy pembina merekodkan pilihan peringkat klien. Itu menjadikan dasar lebih mudah diperiksa daripada urutan tulisan global yang membaluti operasi tak segerak.

Tetapan global masih berguna

Satu dasar proksi seluruh JVM boleh sesuai apabila setiap klien yang terlibat bertujuan mematuhinya. Tetapkan dasar itu semasa permulaan aplikasi dan sahkan pustaka mana yang mematuhinya.

Masalah timbul apabila sifat global digunakan sebagai suis sementara untuk permintaan individu. Dalam pelayan, pekerja latar belakang dan panggilan pustaka boleh berjalan serentak walaupun kaedah anda kelihatan segerak. Simpan keadaan penghalaan pada klien atau penyambung yang memiliki sambungan itu, supaya permintaan lain tidak dapat mengubahnya di tengah kerja.

Artikel berkaitan