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