Feign

发布时间 2023-05-23 04:12:49作者: mty072788

Feign远程调用

  1. 导包 springboot-cloud-starter-openfeign
  2. 启动类加注解 @EnableFeignClients
  3. 写 feign 接口并注入spring。 feign接口的方法 与 被调用服务的 controller的方法一致(访问方式、访问路径、返回值类型、接收参数)
点击查看代码
@feign("要调用的服务名")
public interface userFeign(){
 @GetMapping("/user/{id}")
 User queryById(@PathVariable("id") Long id);
}
4. 消费方直接使用 feign接口调方法 即可完成远程调用

Feign优化使用
引依赖: feign-httpclient

  1. 日志级别尽量用 BASIC
  2. 使用HttpClient或OKHttp替代默认的URLConnection
    2.1. 引依赖 feign-httpclient
    2.2. 写配置
点击查看代码
httpclient:
   enable: ture #开启feign对HttpClient的支持
   max-connections: 200 # 最大的连接数
   max-connections-per-route: 50 # 每个路径的最大连接数
   

配置日志级别

  1. 写配置
点击查看代码
public interface FeignLogLeverConfiguration{
   @Bean
   // Logger 是 feign 包下的,别导错了
   public Logger.Lever feignLogLever(){
    return Logger.Lever.BASIC;
}
}
2. 设置 该日志配置生效范围。 若要全局生效,则在 启动类注解上加属性 @EnableFeignClients(defaultConfiguration = FeignLogLeverConfiguration.class), 若只在局部 某个feign接口生效,则在该 feign接口加属性 @FeignClient("user-server",configuration = FeignLogLeverConfiguration.class)

feign最佳使用方式
所谓最佳使用方式,就是使用该技术的过程中,体验最好的一种使用方式
直接把 feign的client单独抽取出来作为独立的模块,并把接口有关的pojo、feign的配置都放到这个模块中,可提供给所有消费者使用。
例如,将UserClient、User、Feign的默认配置都抽取到一个feign-api包中,所有微服务引用该依赖包,即可直接使用。
注意:单独把feign抽取为独立模块后, 消费方的 @EnableFeignClients 与 要扫描的 feignClient不在 同一个包或者其子包下,所以无法扫描使用 要调用的 feignClient
此时,应在启动类注解 @EnableFeignClients 加属性 basePackages即可。 例:@EnableFeignClients(basePackages = "com.wyz.feign.clients")