RestTemplate का उपयोग करके स्प्रिंग बूट रेस्टापी में बासी कनेक्शन का कारण क्या हो सकता है

Jan 09 2021

मैंने पढ़ा कि "बासी कनेक्शन कनेक्शन को डिस्कनेक्ट करने वाले सर्वर का परिणाम है, लेकिन क्लाइंट को पता नहीं है।" लेकिन मैं यह पता लगाने की कोशिश कर रहा हूं कि मैं स्प्रिंगबूट रेस्टटेम्पलेट (आगे अपाचे से पूलकॉन्नेनेएनेजर का उपयोग करके) और अपने आवेदन से दूसरे एपीआई को कॉल करने के मामले में यह कैसे संभव है? इस स्थिति में, मेरा एप्लिकेशन क्लाइंट है और मैं जिस एप्लिकेशन को कॉल कर रहा हूं वह सर्वर के रूप में कार्य कर रहा है। यदि मैं उस एप्लिकेशन को हिट करता हूं, और मैं जो कॉल कर रहा हूं वह अनुरोध प्राप्त करता है, लेकिन अनुरोध को भरने से पहले किसी तरह टूट जाता है। इस मामले में, मुझे निश्चित रूप से मेरे अंत में अपवाद मिलेगा। और मुझे पूरा यकीन है कि अगर पूलकोनेक्शन मैनजर उस कनेक्शन को बंद कर रहा होगा। फिर मैं कभी भी बासी कनेक्शन कैसे कर सकता हूं?

जवाब

2 Lokesh Jan 12 2021 at 13:47

डिफ़ॉल्ट रूप से, जब तक आप इसे करने के लिए कॉन्फ़िगर नहीं करते हैं, तब तक PoolConnectionManager डंठल कनेक्शन को बंद नहीं करता है। setValidateAfterInactivity()उस समयावधि को कॉन्फ़िगर करने के लिए विधि का उपयोग किया जाता है।

PoolingHttpClientConnectionManager connManager 
          = new PoolingHttpClientConnectionManager();
        connManager.setValidateAfterInactivity(20);

        HttpClient httpClient = HttpClients.custom().setConnectionManager(connManager).build();

आप यहां StackOverflow में एक समान उदाहरण पा सकते हैं

** प्रश्नों के बाद अपडेट करें **

प्रलेखन व्यवहार के आधार पर संस्करण 4.4 से थोड़ा बदला गया है।

बासी कनेक्शन की हैंडलिंग को 4.4 संस्करण में बदल दिया गया था। पहले, कोड इसे फिर से उपयोग करने से पहले हर कनेक्शन को डिफ़ॉल्ट रूप से जांचता था। कोड अब केवल कनेक्शन की जांच करता है यदि कनेक्शन के अंतिम उपयोग के बाद का समय बीत चुका है जो सेट किया गया है। डिफ़ॉल्ट टाइमआउट 2000ms पर सेट है

https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.html#setValidateAfterInactivity(int)