Bitta thread proxy xususiyatini o'rnatadi, so'rov yuboradi va eski qiymatni tiklaydi. Boshqa thread boshqa proxy bilan xuddi shunday qiladi. Kod yuqoridan pastga o'qilganda tartibli ko'rinadi, lekin ikkala thread ham umumiy JVM holatini o'zgartirmoqda.

System.setProperty() jarayon uchun tizim xususiyatini o'zgartiradi. U o'zini chaqirgan threadga marshrutni biriktirmaydi. Bir vaqtdagi so'rov boshqa birovning ishi uchun yozilgan qiymatni ko'rishi mumkin va mavjud client allaqachon o'z konfiguratsiyasini ushlagan bo'lishi mumkin.

Marshrutni clientning qismiga aylantiring

Java HTTP clienti uchun qasddan tanlangan proxy selektorlari bo'lgan clientlar yarating. Ish yuklari turli marshrutlash siyosatlarini talab qilganda clientlarni alohida saqlang:

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

Importlar java.net, java.net.http va java.time. Manzil misol uchun; ruxsat etilgan ommaviy marshrut sinovlari uchun HTTP proxy ro'yxati nomzod oxirgi nuqtalarni taqdim etadi. So'rov muddatlari va proxy autentifikatsiyasini ilova ehtiyojlariga ko'ra alohida sozlang.

quruvchining proxy usuli client darajasidagi tanlovni qayd etadi. Bu siyosatni asinxron operatsiyalar atrofida o'ralgan global yozuvlar ketma-ketligidan ko'ra osonroq tekshirish imkonini beradi.

Global sozlamalar hali ham foydali

Butun JVM uchun yagona proxy siyosati har bir ishtirokchi client unga rioya qilishi mo'ljallanganda o'rinli bo'lishi mumkin. Bu siyosatni ilova ishga tushganda o'rnating va qaysi kutubxonalar unga rioya qilishini tekshiring.

Muammolar global xususiyatlar alohida so'rovlar uchun vaqtinchalik kalit sifatida ishlatilganda yuzaga keladi. Serverda sizning usulingiz sinxron ko'rinsa ham fon ishchilari va kutubxona chaqiruvlari bir vaqtda ishlashi mumkin. Marshrutlash holatini ulanishga ega client yoki ulagichda saqlang, shunda boshqa so'rov uni ish o'rtasida o'zgartira olmaydi.

O'xshash maqolalar