Retry java RestTemplate HTTP request if host offline

前端 未结 3 1607
清酒与你
清酒与你 2020-12-25 13:34

Hi I\'m using the spring RestTemplate for calling a REST API. The API can be very slow or even offline. My application is building the cache by sending thousand

3条回答
  •  一整个雨季
    2020-12-25 14:06

    I had same situation and done some googling found the solution. Giving answer in hope it help someone else. You can set max try and time interval for each try.

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

    And my rest service that i want to execute is below.

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

提交回复
热议问题