Commit 7be203a3 authored by 郑航's avatar 郑航

加入FeignReplaceWithOkhttp

支持Feign自动替换Client为OkHttp,支持调用链跟踪
加入Feign使用OkHttp时的日志打印,无需单独配置Feign日志打印
parent c86ff641
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
<zipkin.version>2.6.1</zipkin.version> <zipkin.version>2.6.1</zipkin.version>
<okhttp.version>3.10.0</okhttp.version> <okhttp.version>3.10.0</okhttp.version>
<elastic.job.version>2.1.5</elastic.job.version> <elastic.job.version>2.1.5</elastic.job.version>
<feign-http.version>9.5.1</feign-http.version>
</properties> </properties>
<dependencyManagement> <dependencyManagement>
...@@ -36,6 +37,18 @@ ...@@ -36,6 +37,18 @@
</dependencyManagement> </dependencyManagement>
<dependencies> <dependencies>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
<version>${feign-http.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>1.4.0.RELEASE</version>
<optional>true</optional>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot-starter-web</artifactId>
...@@ -63,6 +76,12 @@ ...@@ -63,6 +76,12 @@
<version>${okhttp.version}</version> <version>${okhttp.version}</version>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>logging-interceptor</artifactId>
<version>${okhttp.version}</version>
<optional>true</optional>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.amqp</groupId> <groupId>org.springframework.amqp</groupId>
......
...@@ -16,9 +16,12 @@ import cn.quantgroup.tech.brave.service.*; ...@@ -16,9 +16,12 @@ import cn.quantgroup.tech.brave.service.*;
import cn.quantgroup.tech.brave.service.impl.*; import cn.quantgroup.tech.brave.service.impl.*;
import cn.quantgroup.tech.brave.slf4j.MDCCurrentTraceContext; import cn.quantgroup.tech.brave.slf4j.MDCCurrentTraceContext;
import com.dangdang.ddframe.job.api.ElasticJob; import com.dangdang.ddframe.job.api.ElasticJob;
import feign.Client;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import okhttp3.ConnectionPool;
import okhttp3.Dispatcher; import okhttp3.Dispatcher;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import org.apache.http.client.HttpClient; import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClientBuilder;
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.ProceedingJoinPoint;
...@@ -26,9 +29,13 @@ import org.aspectj.lang.annotation.Around; ...@@ -26,9 +29,13 @@ import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Aspect;
import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.*; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
...@@ -45,6 +52,7 @@ import zipkin2.reporter.kafka11.KafkaSender; ...@@ -45,6 +52,7 @@ import zipkin2.reporter.kafka11.KafkaSender;
import javax.servlet.Filter; import javax.servlet.Filter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit;
/** /**
* 注册brave * 注册brave
...@@ -285,6 +293,41 @@ public class BraveAutoConfiguration { ...@@ -285,6 +293,41 @@ public class BraveAutoConfiguration {
} }
} }
@Configuration
@ConditionalOnClass(EnableFeignClients.class)
@ConditionalOnProperty(prefix = "tech.brave", name = "enabled", havingValue = "true", matchIfMissing = true)
public static class FeignReplaceWithOkhttp {
@Autowired
private ITechOkHttpClient techOkHttpClient;
/**
* FeignReplaceWithOkhttp 替换Feign默认客户端为OKHTTP 支持调用链跟踪
*
* @return
*/
@Bean
public Client feignClient() {
log.info("开始注册FeignClient,使用OkHttp替换FeignClient");
return new feign.okhttp.OkHttpClient(okHttpClient());
}
@Bean
public OkHttpClient okHttpClient() {
okhttp3.OkHttpClient.Builder okHttpClientBuilder = techOkHttpClient.createOkHttpClientBuilder();
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
okHttpClientBuilder.addInterceptor(httpLoggingInterceptor)
.connectionPool(new ConnectionPool(100,5, TimeUnit.MINUTES))
.readTimeout(1, TimeUnit.SECONDS)
.writeTimeout(1,TimeUnit.SECONDS)
.connectTimeout(1,TimeUnit.SECONDS)
.retryOnConnectionFailure(true);
return okHttpClientBuilder.build();
}
}
@Deprecated @Deprecated
@Configuration @Configuration
@ConditionalOnClass(HttpClient.class) @ConditionalOnClass(HttpClient.class)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment