fix: 修正feign client 调用异常问题
author刘洪青 <hongqing.liu@supwisdom.com>
Thu, 5 Sep 2019 13:33:18 +0000 (21:33 +0800)
committer刘洪青 <hongqing.liu@supwisdom.com>
Thu, 5 Sep 2019 13:33:18 +0000 (21:33 +0800)
aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/base/configuration/BaseFeignClientConfiguration.java
aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/biz/configuration/BizFeignClientConfiguration.java
common/core/src/main/java/com/supwisdom/institute/backend/common/core/feign/FeignClientBuilder.java

index 68e44f9..1e4e614 100644 (file)
@@ -1,6 +1,8 @@
 package com.supwisdom.institute.backend.admin.aggr.apis.remote.base.configuration;
 
+import org.apache.http.conn.HttpClientConnectionManager;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.commons.httpclient.ApacheHttpClientFactory;
 import org.springframework.context.annotation.Bean;
 
 import com.supwisdom.institute.backend.common.core.feign.FeignClientBuilder;
@@ -16,7 +18,9 @@ public class BaseFeignClientConfiguration {
       @Value("${sw-backend-base-api.client-auth.key-store:}") String keyStore,
       @Value("${sw-backend-base-api.client-auth.key-store-password:}") String keyStorePassword,
       @Value("${sw-backend-base-api.client-auth.trust-store:}") String trustStore,
-      @Value("${sw-backend-base-api.client-auth.trust-store-password:}") String trustStorePassword) {
+      @Value("${sw-backend-base-api.client-auth.trust-store-password:}") String trustStorePassword,
+      ApacheHttpClientFactory httpClientFactory,
+      HttpClientConnectionManager httpClientConnectionManager) {
     
     return FeignClientBuilder.builder()
         .enabled(enabled)
@@ -26,7 +30,7 @@ public class BaseFeignClientConfiguration {
         .trustStore(trustStore)
         .trustStorePassword(trustStorePassword)
         .build()
-        .client();
+        .apacheHttpClient(httpClientFactory, httpClientConnectionManager);
   }
 
 }
index 88f5cda..ca60e7d 100644 (file)
@@ -1,6 +1,8 @@
 package com.supwisdom.institute.backend.admin.aggr.apis.remote.biz.configuration;
 
+import org.apache.http.conn.HttpClientConnectionManager;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.commons.httpclient.ApacheHttpClientFactory;
 import org.springframework.context.annotation.Bean;
 
 import com.supwisdom.institute.backend.common.core.feign.FeignClientBuilder;
@@ -16,7 +18,9 @@ public class BizFeignClientConfiguration {
       @Value("${sw-backend-biz-api.client-auth.key-store:}") String keyStore,
       @Value("${sw-backend-biz-api.client-auth.key-store-password:}") String keyStorePassword,
       @Value("${sw-backend-biz-api.client-auth.trust-store:}") String trustStore,
-      @Value("${sw-backend-biz-api.client-auth.trust-store-password:}") String trustStorePassword) {
+      @Value("${sw-backend-biz-api.client-auth.trust-store-password:}") String trustStorePassword,
+      ApacheHttpClientFactory httpClientFactory,
+      HttpClientConnectionManager httpClientConnectionManager) {
     
     return FeignClientBuilder.builder()
       .enabled(enabled)
@@ -26,7 +30,7 @@ public class BizFeignClientConfiguration {
       .trustStore(trustStore)
       .trustStorePassword(trustStorePassword)
       .build()
-      .client();
+      .apacheHttpClient(httpClientFactory, httpClientConnectionManager);
   }
 
 }
index 181ad10..d970094 100644 (file)
@@ -1,16 +1,18 @@
 package com.supwisdom.institute.backend.common.core.feign;
 
 import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSocketFactory;
 
 import lombok.extern.slf4j.Slf4j;
 
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.conn.HttpClientConnectionManager;
 import org.apache.http.conn.ssl.NoopHostnameVerifier;
+import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.ssl.SSLContextBuilder;
 import org.apache.http.ssl.SSLContexts;
+import org.springframework.cloud.commons.httpclient.ApacheHttpClientFactory;
 import org.springframework.util.ResourceUtils;
 
-import feign.Client;
 import feign.httpclient.ApacheHttpClient;
 
 @Slf4j
@@ -25,7 +27,9 @@ public class FeignClientBuilder {
   private String trustStore;
   private String trustStorePassword;
   
-  public Client client() {
+  public ApacheHttpClient apacheHttpClient(
+      ApacheHttpClientFactory httpClientFactory,
+      HttpClientConnectionManager httpClientConnectionManager) {
 
     if (!enabled) {
       return new ApacheHttpClient();
@@ -54,9 +58,21 @@ public class FeignClientBuilder {
         
         SSLContext sslContext = sslContextBuilder.build();
         
-        SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
+        //SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
+        
+        RequestConfig defaultRequestConfig = RequestConfig.custom()
+            .setConnectTimeout(12000)
+            .setRedirectsEnabled(true)
+            .build();
+
+        CloseableHttpClient httpClient = httpClientFactory.createBuilder().
+            setSSLContext(sslContext).
+            setSSLHostnameVerifier(new NoopHostnameVerifier()).   // FIXME: HostnameVerifier
+            setConnectionManager(httpClientConnectionManager).
+            setDefaultRequestConfig(defaultRequestConfig).build();
+        
 
-        Client trustSSLSockets = new Client.Default(sslSocketFactory, new NoopHostnameVerifier());  // FIXME: feign Client
+        ApacheHttpClient trustSSLSockets = new ApacheHttpClient(httpClient);
         log.info("feignClient load with ssl.");
         return trustSSLSockets;
       } catch (Exception e) {