Http客户端 Feign
一、RestTemplate方式调用存在的问题
二、Feign介绍
三、Feign的定义和使用
Feign已经集成了ribbon,可以自动实现负载均衡
(一)步骤
声明完成之后,拿着接口调用方法即可
看到starter:知道属于自动装配
(二)使用方式
1.对于有很复杂参数的请求怎么办?
因为是基于注解的参数注入当时,所以多加几个注解即可
(三)总结
四、自定义Feign的配置
(一)、Feign允许运行自定义配置来覆盖默认配置
一般我们需要配置的就是日志级别
(二)演示修改日志级别
两种方式:基于配置文件的方式、基于Java代码的方式
1.配置文件方式
2.Java代码的方式,先声明一个bean
先写个配置类
①是在启动类上,②是在某一个具体的服务上
(三)日志配置总结
一般用basic或none,如果是找bug的话,用full
五、Feign的性能优化
Feign是一个声明式客户端,只是把声明变成http请求,最终发http请求时,还是会用到一些别的客户端,默认是用URLConnection
(一)优化步骤——连接池配置
(二)具体实现
1.引入依赖
2.开启httpclient
(三)总结
六、Feign的最佳实践
这种方式也有一定问题,不推荐在服务和客户端之间共享接口,会造成紧耦合,并且在MVC中不起作用(方法参数是无法继承下来的),需要自己再写一遍。但是这种规范(契约)在企业用的还是比较多的
会造成引入用不到的方法、
根据对耦合度和契约的需求来选择两种方式
总结
七、实现Feign最佳实践【抽取FeignClient】
userClient
默认配置
user实体类
此时Feign-api就准备好了,以后可以直接使用这一套api,在相应工程下的pom文件中引入feign的统一api即可,实现了客户端代码的抽取
存在的问题:找不到FeignClient了
编译没报错,说明有这个类,没有注入成功,说明这个类没有创建对象,也就是说在spring的容器中找不到它,报错信息如下:
【FeignClient所在的包是feign的包,现在默认扫描的包是order包,导致扫描不到】
为什么这个接口没有对应的对象?因为之前有对象,是有@FeignClient这个注解,spring扫描到了这个注解,就会给这个接口创建对象。不能将扫描包的范围扩大,解决方式如下: