RestTemplate方式调用存在的问题
先来看看我们以前利用RestTemplate发起远程调用的代码
存在下面的问题:
代码可读性差,编程体验不统一
参数复杂URL难以维护
feign是一个声明式的http客户端。
其作用就是帮助我们优雅地实现http请求的发送,解决上面提到的问题。
使用feign的步骤如下:
1、引入依赖
2、在项目的启动类添加注解开启feign的功能;
3.编写feign客户端:
主要是基于SpringMVC的注解来生命远程调用的信息,比如:
服务名称:userservice
请求方式:GET
请求路径:/user/{id}
请求参数:Long id
返回值类型:User
对比:
原来的
总结
Feign的日志配置
1.方式一是配置文件,feign.client.config.xxx.loggerLevel
1)如果xxx是default则达标全局
2)如果xxx是服务名称,例如userservice则代表某服务
2.方式二是java代码配置Logger.Level这个Bean
1)如果在@EnableFeignClient注解声明则代表全局
2)如果在@Feignclient注解中声明则达标某服务
Feign的性能优化
Feign底层的客户端实现:
- URLConnection:默认实现,不支持连接池
- Apache:HttpClient:支持连接池
- OKHttp:支持连接池
因此提高Feign的性能主要手段就是使用连接池代替默认的URLConnection
URLConnection每次都要建立连接又断开连接。使用连接池能够提升效率。
Feugn的优化:
1.使用httpclient或okhttp代替URLConnectionl
1)引入依赖
2)配置文件开启httpclient功能,设置连接池参数
2.日志级别尽量使用basic
Feign的最佳实践
什么是最佳实践?就是企业在使用的过程中各种踩坑,总结出来的最佳方法。
方式一(继承):给消费者的FeignClient和提供者地controller定义统一的父接口作为标准。
抽取FeignClient
实现最佳时间方式二的步骤如下:
1.首先创建一个module,命名为feign-api,然后引入feign的starter依赖
2.将order-service中编写的UserClient、user、defaultFeignConfiguration都复制到feign-api项目中
3.在order-service中引入feign-api的依赖
4.修改order-service中的所有与上述三个组件有关的import部分,改成导入feign-api中的包