Bläddra i källkod

增加http 连接池重试策略

wks 2 år sedan
förälder
incheckning
b488bdce44

+ 9 - 1
src/main/java/com/ydtech/config/resttemplate/RestTemplateConfig.java

@@ -8,6 +8,7 @@ import org.apache.http.config.RegistryBuilder;
 import org.apache.http.conn.socket.ConnectionSocketFactory;
 import org.apache.http.conn.socket.PlainConnectionSocketFactory;
 import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
 import org.apache.http.impl.client.HttpClientBuilder;
 import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
 import org.springframework.context.annotation.Bean;
@@ -49,7 +50,14 @@ public class RestTemplateConfig {
                 .setConnectTimeout(10000) //连接上服务器的超时时间
                 .setConnectionRequestTimeout(1000) //从连接池中获取连接的超时时间
                 .build();
-        return HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).setConnectionManager(connectionManager).build();
+
+        return HttpClientBuilder.create()
+                .setDefaultRequestConfig(requestConfig)
+                .setConnectionManager(connectionManager)
+                // 设置重试策略和重试次数
+                .setServiceUnavailableRetryStrategy(new RestTemplateServiceUnavailableRetryStrategy())
+                .setRetryHandler(new DefaultHttpRequestRetryHandler(3, true))
+                .build();
     }
 
 }

+ 24 - 0
src/main/java/com/ydtech/config/resttemplate/RestTemplateServiceUnavailableRetryStrategy.java

@@ -0,0 +1,24 @@
+package com.ydtech.config.resttemplate;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.ServiceUnavailableRetryStrategy;
+import org.apache.http.protocol.HttpContext;
+
+@Slf4j
+public class RestTemplateServiceUnavailableRetryStrategy implements ServiceUnavailableRetryStrategy {
+
+    @Override
+    public boolean retryRequest(HttpResponse httpResponse, int i, HttpContext httpContext) {
+        return i <= 3 &&
+                httpResponse.getStatusLine().getStatusCode() >= 5;
+    }
+
+    @Override
+    public long getRetryInterval() {
+        return 1000;
+    }
+
+
+
+}

+ 1 - 1
src/main/java/com/ydtech/modules/order/service/impl/YongchengOrderApiServiceImpl.java

@@ -358,7 +358,7 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
      */
     public boolean ciRepetitionInsure(RuoteResponse rr, Ruote m) {
         String errorMsg = rr.getHead().getErrorMessage();
-        if (rr.getHead().getErrorCode().equals("009999") && errorMsg.contains("重复投保") && errorMsg.contains("终保日期") && errorMsg.contains("终保日期")) {
+        if (rr.getHead().getErrorCode().equals("009999") && errorMsg.contains("重复投保") && errorMsg.contains("终保日期")) {
             requestInfoList.add(errorMsg);
             log.info("永诚API方式 - xml请求 ------------报价 ->   交强重复投保----------------");