java调用接口失败重试,httpclient接口测试中重试控制器设置
本人在使用httpclient做接口測試的過程中,之前并沒有考慮到請求失敗自動重試的情況,但有時又需要在發生某些錯誤的時候重試,比如超時,比如響應頻繁被拒絕等等,在看過官方的示例后,自己寫了一個自動重試的控制器。分享代碼,供大家參考。
下面是獲取控制器的方法:
/**
* 獲取重試控制器
*
* @return
*/
private static HttpRequestRetryHandler getHttpRequestRetryHandler() {
return new HttpRequestRetryHandler() {
public boolean retryRequest(IOException exception, int executionCount, HttpContext context) {
logger.warn("請求發生錯誤!", exception);
if (executionCount > HttpClientConstant.TRY_TIMES) return false;
if (exception instanceof NoHttpResponseException) {
logger.warn("沒有響應異常");
sleep(1);
return true;
} else if (exception instanceof ConnectTimeoutException) {
logger.warn("連接超時,重試");
sleep(5);
return true;
} else if (exception instanceof SSLHandshakeException) {
logger.warn("本地證書異常");
return false;
} else if (exception instanceof InterruptedIOException) {
logger.warn("IO中斷異常");
sleep(1);
return true;
} else if (exception instanceof UnknownHostException) {
logger.warn("找不到服務器異常");
return false;
} else if (exception instanceof SSLException) {
logger.warn("SSL異常");
return false;
} else if (exception instanceof HttpHostConnectException) {
logger.warn("主機連接異常");
return false;
} else if (exception instanceof SocketException) {
logger.warn("socket異常");
return false;
} else {
logger.warn("未記錄的請求異常:{}", exception.getClass());
}
HttpClientContext clientContext = HttpClientContext.adapt(context);
HttpRequest request = clientContext.getRequest();
// 如果請求是冪等的,則重試
if (!(request instanceof HttpEntityEnclosingRequest)) {
sleep(2);
return true;
}
return false;
}
};
}
這樣超時時間和重試次數來作為判斷接口請求失敗的依據了。下面是控制器設置方法:
/**
* 通過連接池獲取https協議請求對象
*
* 增加默認的請求控制器,和請求配置,連接控制器,取消了cookiestore,單獨解析響應set-cookie和發送請求的header,適配多用戶同時在線的情況
*
*
* @return
*/
private static CloseableHttpClient getCloseableHttpsClients() {
// 創建自定義的httpsclient對象
CloseableHttpClient client = HttpClients.custom().setConnectionManager(connManager).setRetryHandler(httpRequestRetryHandler).setDefaultRequestConfig(requestConfig).build();
// CloseableHttpClient client = HttpClients.createDefault();//非連接池創建
return client;
}
技術類文章精選
非技術文章精選
總結
以上是生活随笔為你收集整理的java调用接口失败重试,httpclient接口测试中重试控制器设置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中函数的表达,如何表达“用T作为
- 下一篇: matlab m n size a,ma