एकैसाथ Java अनुरोधहरूले गलत प्रोक्सी सेटिङ साझा गर्न सक्छन्
प्रत्येक अनुरोधका लागि ग्लोबल गुण परिवर्तन थ्रेडहरूबीच कसरी चुहिन्छ र प्रोक्सी नीति क्लाइन्टमा कसरी राख्ने हेर्नुहोस्।
एउटा थ्रेडले प्रोक्सी गुण सेट गर्छ, अनुरोध गर्छ र पुरानो मान पुनर्स्थापित गर्छ। अर्को थ्रेडले फरक प्रोक्सीसँग त्यही गर्छ। माथिबाट तल पढ्दा कोड सफा देखिन्छ, तर दुवै थ्रेड साझा JVM स्थिति परिवर्तन गर्दै छन्।
System.setProperty() ले प्रक्रियाको सिस्टम गुण परिवर्तन गर्छ। यसले यसलाई बोलाउने थ्रेडमा मार्ग जोड्दैन। एकैसाथ अनुरोधले अरूको कामका लागि लेखिएको मान देख्न सक्छ, र विद्यमान क्लाइन्टले आफ्नै कन्फिगरेसन पहिले नै समातिसकेको हुन सक्छ।
मार्गलाई क्लाइन्टको भाग बनाउनुहोस्
Java को HTTP क्लाइन्टका लागि जानाजान छानिएका प्रोक्सी चयनकर्ताहरूसहित क्लाइन्ट बनाउनुहोस्। कामलाई फरक राउटिङ नीति चाहिएमा छुट्टै क्लाइन्ट राख्नुहोस्:
HttpClient client = HttpClient.newBuilder()
.proxy(ProxySelector.of(
new InetSocketAddress("203.0.113.10", 8080)))
.connectTimeout(Duration.ofSeconds(5))
.build();आयातहरू java.net, java.net.http र java.time हुन्। ठेगाना उदाहरणका लागि हो; अनुमति दिइएका सार्वजनिक मार्ग परीक्षणका लागि HTTP प्रोक्सी सूची ले उम्मेदवार इन्डपोइन्ट दिन्छ। अनुरोधको समयसीमा र प्रोक्सी प्रमाणीकरण अनुप्रयोगको आवश्यकताअनुसार छुट्टै कन्फिगर गर्नुहोस्।
बिल्डरको proxy विधि ले क्लाइन्ट-स्तरको छनोट रेकर्ड गर्छ। यसले असिंक्रोनस अपरेसनहरू वरिपरि लपेटिएका ग्लोबल लेखनको क्रमभन्दा नीति जाँच्न सजिलो बनाउँछ।
ग्लोबल सेटिङको अझै उपयोग छ
सहभागी हरेक क्लाइन्टले त्यसलाई पछ्याउने उद्देश्यले राखिएको भए पूरै JVM का लागि एउटै प्रोक्सी नीति उपयुक्त हुन सक्छ। त्यो नीति अनुप्रयोग सुरु हुँदा सेट गर्नुहोस् र कुन पुस्तकालयहरूले त्यसको सम्मान गर्छन् जाँच्नुहोस्।
ग्लोबल गुणहरू व्यक्तिगत अनुरोधका लागि अस्थायी स्विचका रूपमा प्रयोग गर्दा समस्या आउँछ। सर्भरमा, तपाईंको विधि सिंक्रोनस देखिए पनि पृष्ठभूमि कामदारहरू र पुस्तकालय कलहरू एकैसाथ चल्न सक्छन्। राउटिङ स्थिति जडानको मालिक क्लाइन्ट वा कनेक्टरसँग राख्नुहोस्, ताकि अर्को अनुरोधले कामको बीचमा त्यसलाई परिवर्तन गर्न नसकोस्।