常用的Http客户端
- 1.HttpClient(apche下子项目)
- 2.Okhttp(主要用户安卓)
- 3.HttpURLConnection(java 标准的http请求客户端,单线程)
- 4.RestTemplate ()
- 5.OpenFeign是Netflix开源的声明式HTTP客户端
HttpClient和Okhttp可以使用线程池
Feign使用http请求调用远程服务就行调用本地方法似的,开发者感知不到是一个远程方法或者Http请求。
restTemplate 是封装了httpClient
feign方式 封装了OKhttp
feign和openfeign的区别
- a、他们底层都是内置了Ribbon,去调用注册中心的服务。
- b、Feign是Netflix公司写的,是SpringCloud组件中的一个轻量级RESTful的HTTP服务客户端,是SpringCloud中的第一代负载均衡客户端。
OpenFeign是SpringCloud自己研发的,在Feign的基础上支持了Spring MVC的注解,如@RequesMapping等等。是SpringCloud中的第二代负载均衡客户端。 - c、Feign本身不支持Spring MVC的注解,使用Feign的注解定义接口,调用这个接口,就可以调用服务注册中心的服务
OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。
openFeign的细粒度配置
日志等级有4种,分别是:
- NONE【性能最佳,适用于生产】:不记录任何日志(默认值)。
- BASIC【适用于生产环境追踪问题】:仅记录请求方法、URL、响应状态代码以及执行时间。
- HEADERS:记录BASIC级别的基础上,记录请求和响应的header。
- FULL【比较适用于开发及测试环境定位问题】:记录请求和响应的header、body和元数据。
配置Feign的日志,首先配置springBoot的日志级别
springBoot日志级别介绍
logging:
level:
com.msb: debug
1通过Java代码配置日志级别
设置日志级别
public class StockFeignConfiguration {
@Bean
public Logger.Level getLevel(){
return Logger.Level.FULL;
}
配置日志级别细粒度配置 只有调用这里的service才有详细的日志信息
@FeignClient(name="msb-stock",configuration = StockFeignConfiguration.class)
public interface FeignClientService {
@GetMapping("stock/reduce/{productId}")
public void reduice(@PathVariable("productId") Integer productId);
2.通过属性的方式配置日志
取消上面的java代码中的日志配置
在配置文件中,添加属性配置
feign:
client:
config:
msb-stock:
loggerLevel: full
3.日志的全局配置
- 通过java代码的方式配置
1.就是将我们写的配置文件,日志级别交给spring管理 不推荐
2.在启动类的openFeign的时候配置@Configuration //添加配置注解 public class StockFeignConfiguration { @Bean public Logger.Level getLevel(){ return Logger.Level.FULL; }
@EnableFeignClients(defaultConfiguration = StockFeignConfiguration.class)//日志级别配置
- 通过属性的方式配置全局日志
只需要将细粒度配置的 应用名改为 default
feign:
client:
config:
default:
loggerLevel: full
openFeign支持的配置
1.锲约配置
@Bean //springMvc相关的注解,就是通过这个解析的
public Contract feignContract(){
return new SpringMvcContract();
}
2.编解码
默认使用spring的编解码
拦截器
添加拦截器
- 实现RequestInterceptor
添加请求头
- 注册拦截器
- 在服务端添加拦截器
打印请求头
- 服务端注册拦截器
- 查看访问结果 打印请求头
配置请求http请求客户端
默认的是default in client
- 引入httpClient依赖
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
- 添加配置
feign:
httpclient:
enabled: true
max-connections: 200
max-connections-per-route: 50
- debug 启动,查看是否走httpClient实现
- okHttp的引用依赖和配置
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
</dependency>
feign:
client:
config:
msb-stock:
loggerLevel: full
tokenId: 12232223
okhttp:
enabled: true
httpclient:
max-connections-per-route: 50
超时连接配置
只需要做以下配置就可以了。