如何在RestAssured中为失败的REST调用实现重试逻辑

时间:2017-03-02 06:24:18

标签: java rest logging apache-httpclient-4.x rest-assured

我正在使用RestAssured来触发API调用,并希望在REST调用失败时实现重试逻辑。

这个要求是因为我们正在获得某些API的间歇性500响应代码,这些代码通常会在重试时运行。

我已经实现了以下代码,但它似乎不起作用 -

HttpClientConfig.HttpClientFactory htc = new HttpClientConfig.HttpClientFactory() {

    @Override
    public HttpClient createHttpClient() {
        DefaultHttpClient d = new DefaultHttpClient();

        d.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(restRetryCount, true));
        return d;
    }
};

RestAssuredConfig rac = RestAssured.config().httpClient(HttpClientConfig.httpClientConfig().httpClientFactory(htc));

此外,由于RestAssured不支持HTTPClient级别日志记录,我尝试使用java.util.logging启用apache httpclient的日志记录,但似乎也无法正常工作。 / p>

使用 -

创建custom.logging.properties文件
# Enables the header wire and context logging
org.apache.http.level = FINEST
org.apache.http.wire.level = SEVERE

# Enables the context logging for connection management & request execution
org.apache.http.impl.conn.level = FINEST
org.apache.http.impl.client.level = FINEST
org.apache.http.client.level = FINEST

并编写以下内容以启动日志记录 -

public static Logger initiateHttpTrafficLogging(){
     Logger log = Logger.getLogger("httptraffic.log");
     ClassLoader loader = Thread.currentThread().getContextClassLoader();
     InputStream is = loader.getResourceAsStream("custom.logging.properties");
     try{
         LogManager.getLogManager().readConfiguration(is);
         log.setLevel(Level.FINEST);
         log.addHandler(new ConsoleHandler());
         log.setUseParentHandlers(false);
         log.info("Initiating HTTP Traffic logging ::\n\n");
     } catch (IOException ie){
         Assert.fail("ERROR: Could not load the loggin properties !!!", ie.fillInStackTrace());
    }
    return log;
 }

有谁能请我就我出错的地方或任何解决此问题的方法提供指导。

感谢您的回复。 感谢。

1 个答案:

答案 0 :(得分:5)

有一个Spring-retry jar你可以将它与你的应用程序集成。你可以在你的方法中使用这样的东西

  @Retryable(maxAttempts = 4, backoff = @Backoff(delay = 200),
            include = {RetryableException.class})
    ResponseEntity<String> request(
            String url, HttpMethod method, HttpEntity<?> entity, Class<?> type,
            Map<String, String> parameters
    ) throws Exception{} 
  

你需要在你的@EnableAspectJAutoProxy和@EnableRetry中做   配置类