2015-09-02 12 views
5

हाय मैं एक REST API को कॉल करने के लिए वसंत RestTemplate का उपयोग कर रहा हूं। एपीआई बहुत धीमा या ऑफलाइन भी हो सकता है। मेरा आवेदन दूसरे के बाद हजारों अनुरोध भेजकर कैश का निर्माण कर रहा है। प्रतिक्रियाएं भी बहुत धीमी हो सकती हैं, क्योंकि उनमें बहुत अधिक डेटा होता है।जावा होस्ट RestTemplate HTTP अनुरोध को ऑफ़लाइन होस्ट करें

मैंने पहले ही टाइमआउट को 120 सेकंड में बढ़ा दिया है। मेरी समस्या अब यह है कि एपीआई ऑफ़लाइन हो सकती है और मुझे org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool अपवाद मिलता है।

जब एपीआई ऑफलाइन है, तो एप्लिकेशन को इंतजार करना चाहिए और एपीआई फिर से ऑनलाइन होने तक पुनः प्रयास करना चाहिए।

क्या मैं इसे अपने आप पर अपवाद-लूप बनाने के बिना बॉक्स के बाहर RestTemplate में प्राप्त कर सकता हूं?

धन्यवाद!

+0

नहीं, आप नहीं कर सकते हैं, आपको इसे मैन्युअल रूप से करना है। साथ ही, यदि डेटा प्राप्त करने के लिए 120 सेकंड का समय पर्याप्त नहीं है, तो आपको एपीआई डेवलपर से संपर्क करना होगा। –

उत्तर

1

मेरे पास एक ही स्थिति थी और कुछ googling समाधान मिला। उम्मीद में जवाब देना यह किसी और की मदद करता है। आप प्रत्येक प्रयास के लिए अधिकतम प्रयास और समय अंतराल सेट कर सकते हैं।

@Bean 
    public RetryTemplate retryTemplate() { 

    int maxAttempt = Integer.parseInt(env.getProperty("maxAttempt")); 
    int retryTimeInterval = Integer.parseInt(env.getProperty("retryTimeInterval")); 

    SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy(); 
    retryPolicy.setMaxAttempts(maxAttempt); 

    FixedBackOffPolicy backOffPolicy = new FixedBackOffPolicy(); 
    backOffPolicy.setBackOffPeriod(retryTimeInterval); // 1.5 seconds 

    RetryTemplate template = new RetryTemplate(); 
    template.setRetryPolicy(retryPolicy); 
    template.setBackOffPolicy(backOffPolicy); 

    return template; 
    } 

और मेरी बाकी सेवा जिसे मैं निष्पादित करना चाहता हूं नीचे है।

retryTemplate.execute(context -> { 
     System.out.println("inside retry method"); 
     ResponseEntity<?> requestData = RestTemplateProvider.getInstance().postAsNewRequest(bundle, ServiceResponse.class, serivceURL, 
       CommonUtils.getHeader("APP_Name")); 

     _LOGGER.info("Response ..."+ requestData); 
      throw new IllegalStateException("Something went wrong"); 
     }); 
संबंधित मुद्दे