Spring میں براہِ راست اور پراکسی RestTemplate بینز ترتیب دیں
ہر کال کے گرد مشترکہ راستہ بدلنے کے بجائے HTTP پراکسی اور واضح براہِ راست JDK کنکشن کے لیے الگ RestTemplate بینز بنائیں۔
کچھ کالوں کو کارپوریٹ پراکسی استعمال کرنا ضروری ہے جبکہ کسی دوسری سروس تک براہِ راست پہنچا جاتا ہے۔ جب درخواستیں اوورلیپ ہو سکتی ہیں تو ایک مشترکہ فیکٹری بدلنے کے بجائے ان راستوں کو الگ RestTemplate مثالیں دیں۔
موجودہ Spring کنفیگریشن کلاس کے اندر:
@Bean("directRestTemplate")
RestTemplate directRestTemplate() {
var factory = new SimpleClientHttpRequestFactory();
factory.setProxy(java.net.Proxy.NO_PROXY);
return new RestTemplate(factory);
}
@Bean("proxyRestTemplate")
RestTemplate proxyRestTemplate() {
var factory = new SimpleClientHttpRequestFactory();
factory.setProxy(new java.net.Proxy(
java.net.Proxy.Type.HTTP,
new java.net.InetSocketAddress("proxy.example", 8080)));
return new RestTemplate(factory);
}
Spring 6.2 کی JDK درخواست فیکٹری کے لیے، Proxy.NO_PROXY واضح براہِ راست کنکشن پالیسی فراہم کرتا ہے۔ فیکٹری کی پراکسی کو سیٹ نہ کر کے چھوڑنے سے اس کے بجائے عام URLConnection کنفیگریشن راستے کی اجازت ملتی ہے، جو JVM پراکسی منتخب کر سکتا ہے۔
مطلوبہ بین منتخب کرنے کے لیے انجیکشن پوائنٹ پر @Qualifier استعمال کریں، مثلاً @Qualifier("directRestTemplate") RestTemplate rest۔ صرف دو بینز کی تعریف کرنا مبہم انحصار کے لیے ان کے درمیان انتخاب نہیں کرتا۔
یہ مثال بغیر تصدیق والی HTTP پراکسی منتخب کرتی ہے۔ پراکسی تصدیق درکار ٹرانسپورٹ کو اسی بین-انتخاب ترتیب کو برقرار رکھتے ہوئے اس کے معاون اسناد فراہم کنندہ کے ساتھ الگ بنایا جا سکتا ہے۔ Apache HttpClient 5 کے ساتھ Spring 6 کے لیے، اس فراہم کنندہ کو پراکسی اینڈ پوائنٹ تک محدود رکھیں۔
ایپلیکیشن کی جانب سے جان بوجھ کر نصب کیے گئے دیگر انٹرسیپٹرز یا درخواست فیکٹریاں اب بھی اس کی اپنی کلائنٹ کنفیگریشن کا حصہ ہیں۔ انہیں اسی راستے کے ساتھ رکھیں جسے واقعی ان کی ضرورت ہے۔