微服务|微服务小结4---http客户端Feign

什么是Feign
在以往的经验中,我们已经知道使用@RestTemplate可以实现远程调用,但RestTemplate有一定的缺陷如代码可读性差,url参数难以维护等 所以就有了Feign
Feign是一个声明式的可插拔的http客户端让我们更方便的进行http请求
如何定义和使用feign客户端
1 引入feign依赖

org.springframework.cloud spring-cloud-starter-openfeign

2 在相应模块的启动类中加入@EnableFeignClients开启feign
@SpringBootApplication @EnableFeignClients public class OrderApplication {public static void main(String[] args) { SpringApplication.run(OrderApplication.class, args); } }

【微服务|微服务小结4---http客户端Feign】3 定义和使用feign客户端
@FeignClient(value = "https://www.it610.com/article/userService")//远程调用的服务为userService public interface UserClient { @GetMapping("/user/{id}") User findById(@PathVariable("id") Long id); }

直接在相应的服务调用UserClient
Feign的日志配置
微服务|微服务小结4---http客户端Feign
文章图片

自定义feign的日志配置
两种方式
1
//全局配置 feign: client: config: default://default代表这是全局配置 loggerLevel: FULL//日志级别为full //局部配置 feign: client: config: userserivce://userservice代表日志只在这个服务内生效 为局部配置 loggerLevel: FULL//日志级别为full

2
1 声明一个日志配置类 public class defaultFeignConfiguration { @Bean public Logger.Level logLever(){ return Logger.Level.BASIC; } } 2 如果是全局配置 @EnableFeignClients(defaultConfiguration = defaultFeignConfiguration.class) 3 如果是局部配置 @FeignClient(configuration = defaultFeignConfiguration)//远程调用的服务为userService

Feign的性能优化
Feign的低层默认URLconnection不使用连接池,这也导致会消耗大量的资源去创建和销毁,性能优化主要是使用OKHttp和Apache HTTPClient 支持线程池的方式来优化以及日志级别尽量使用BASIC以及NULL
引入依赖
io.github.openfeign feign-httpclient

feign: httpclient: enabled: true # 支持HttpClient的开关 max-connections: 200 # 最大连接数 max-connections-per-route: 50 # 单个路径的最大连接数 client: config: default: loggerLevel: BASIC

在实际项目开发中,我们的FeignClient客户端可能要被多个消费者使用,所以我们考虑将FeignClient进行抽取成一个独立的模块,实现松耦合
注意事项:在调用这个独立的Feign模块时我们可能扫描不到这个模块的包
有以下两种方式进行包的读取
1 在EnableFeignClients中指定FeignClient的字节码 @EnableFeignClients(clients = UserClient.class,defaultConfiguration = defaultFeignConfiguration.class) 2 直接指定包路径 @EnableFeignClients(basePackeages= "包路径")

    推荐阅读