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-ന്, ആ ദാതാവിനെ പ്രോക്സി എൻഡ്പോയിന്റിലേക്ക് പരിമിതപ്പെടുത്തുക.
ആപ്ലിക്കേഷൻ ബോധപൂർവം ഇൻസ്റ്റാൾ ചെയ്യുന്ന മറ്റ് ഇന്റർസെപ്റ്ററുകളോ അഭ്യർത്ഥനാ ഫാക്ടറികളോ ഇപ്പോഴും അതിന്റെ സ്വന്തം ക്ലയന്റ് കോൺഫിഗറേഷനിൽ ഉൾപ്പെടുന്നു. അവയ്ക്ക് യഥാർത്ഥത്തിൽ ആവശ്യമുള്ള റൂട്ടിനൊപ്പം അവ സൂക്ഷിക്കുക.