मुझे भी ऐसा करने की आवश्यकता है, और वसंत नियंत्रकों और रेस्ट टेम्पलेट के साथ कुछ गैर इष्टतम के बाद, मुझे एक बेहतर समाधान मिला: Smiley's HTTP Proxy Servlet। लाभ यह है कि यह वास्तव में एएस-आईएस प्रॉक्सी कर रहा है, जैसे अपाचे के mod_proxy
, और यह स्मृति में पूर्ण अनुरोध/प्रतिक्रिया को कैश किए बिना स्ट्रीमिंग तरीके से करता है।
बस, आप उस पथ पर एक नया सर्वलेट पंजीकृत करते हैं जिसे आप किसी अन्य सर्वर पर प्रॉक्सी करना चाहते हैं, और यह सर्वलेट लक्ष्य होस्ट को एक init पैरामीटर के रूप में दें। यदि आप एक web.xml के साथ एक पारंपरिक वेब अनुप्रयोग का उपयोग कर रहे हैं, तो आप तो वह ऐसा कॉन्फ़िगर कर सकते हैं:
<servlet>
<servlet-name>proxy</servlet-name>
<servlet-class>org.mitre.dsmiley.httpproxy.ProxyServlet</servlet-class>
<init-param>
<param-name>targetUri</param-name>
<param-value>http://target.uri/target.path</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>proxy</servlet-name>
<url-pattern>/mapping-path/*</url-pattern>
</servlet-mapping>
या, ज़ाहिर है, आप annotation config साथ जा सकते हैं।
आप स्प्रिंग बूट का उपयोग कर रहे हैं, तो यह और भी आसान है: आप केवल आवश्यक विन्यास के साथ, प्रकार ServletRegistrationBean
की एक सेम बनाने की जरूरत:
@Bean
public ServletRegistrationBean proxyServletRegistrationBean() {
ServletRegistrationBean bean = new ServletRegistrationBean(
new ProxyServlet(), "/mapping-path/*");
bean.addInitParameter("targetUri", "http://target.uri/target.path");
return bean;
}
इस तरह, आप भी वसंत गुणों का उपयोग कर सकते हैं कि पर्यावरण में उपलब्ध हैं।
आप कक्षा ProxyServlet
भी बढ़ा सकते हैं और यदि आपको आवश्यकता हो तो अनुरोध/प्रतिक्रिया शीर्षलेख इत्यादि को अनुकूलित करने के लिए अपने तरीकों को ओवरराइड कर सकते हैं।
अद्यतन: कुछ समय के लिए स्माइली के प्रॉक्सी सर्वलेट का उपयोग करने के बाद, हमारे पास कुछ समय-समय पर समस्याएं थीं, यह विश्वसनीय रूप से काम नहीं कर रही थी। Netflix से Zuul पर स्विच किया गया, उसके बाद कोई समस्या नहीं थी। स्प्रिंग बूट के साथ इसे कॉन्फ़िगर करने पर एक ट्यूटोरियल this link पर पाया जा सकता है।
मुझे क्लाइंट, इंटरमीडिएट सर्वर और कुछ मुख्य सर्वर मिल गए। क्लाइंट केवल मध्यवर्ती सर्वर से बात करता है जो सर्वर पर अपनी कॉल भेजता है। सर्वर इंटरमीडिएट सर्वर को प्रतिक्रिया देता है, जिसे वह तब संसाधित करता है, और उसके बाद ग्राहक को प्रतिक्रिया देता है। – user1144031
अनुरोध हेडर (3) और बॉडी (4) को प्रतिलिपि पैरामीटर (2) की प्रतिलिपि बनाने के लिए तैयार नहीं करना चाहिए (क्योंकि पोस्ट पैरामीटर अनुरोध निकाय का हिस्सा हैं, क्योंकि वे यूआरएल का हिस्सा होंगे)? यदि मैं दोनों चरणों को निष्पादित करता हूं तो यह reduntant (http अनुरोध में) होगा – mickeymoon