2015-09-02 19 views
5

Merhaba Bir REST API çağrısı için yayı RestTemplate kullanıyorum. API çok yavaş veya hatta çevrimdışı olabilir. Uygulamam, binlerce istekleri birbiri ardına göndererek önbelleği oluşturuyor. Cevaplar da çok yavaş olabilir, çünkü çok fazla veri içerirler.Yeniden dene java RestTemplate HTTP isteği çevrimdışı barındıran

Zaman aşımını 120 saniyeye yükselttim. Sorunum şu anda API çevrimdışı olabilir ve bir org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool istisnası olsun.

API'nin çevrimdışı olması durumunda uygulama beklemeli ve API tekrar çevrimiçi oluncaya kadar tekrar denemelidir.

Bunu, istisna döngüleri oluşturmaksızın RestTemplate numaralı kutuda yapabilir miyim?

Teşekkürler!

+0

Hayır, yapamazsınız, bunu elle yapmanız gerekir. Ayrıca, 120 saniyelik zaman verileri almak için yeterli değilse, API geliştiricisiyle iletişim kurmanız gerekir. –

cevap

1

Aynı durumu yaşadım ve bir çözüm buldum. Umarım cevap vermek başka birine yardım eder. Her denemede maksimum deneme ve zaman aralığı ayarlayabilirsiniz.

@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; 
    } 

Ve yürütmek istediğim dinlenme hizmetim aşağıda.

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"); 
     });