Feign

Posted mty072788

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Feign相关的知识,希望对你有一定的参考价值。

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")

feign的使用注意

参考技术A 首先feign接口处和被调用的controller接口无法相同。

1:如果controller的接口有@RequestParm制定了参数名称,那么feign那里也要加入这个注解的属性,并且名字也要取的相同。
2:feign处必须有@RequestParm注解(针对get请求),controller处不一定需要该注解
3:如果想使用get请求传输pojo对象,就使用@SpringQueryMap注解,这个注解会帮我们解析传入的对象的参数然后拼接到url(这里不懂等会讲原理)
4:@SpringQueryMap只能使用一次,使用多次,后面参数接收的值都是填充第一个参数的值。

传入的值为4月1号和4月22号,

然后尝试将传入的参数改为@SpringQueryMap DatesVo datesVo,并不能解析复杂对象,因为feign的本质是对httpClientTemplate对象的封装,所以我们的url很难拼接一个复杂对象上去,或者无法解析复杂对象。
6:由于get的参数大小有限制,所以当传输的对象复杂时,推荐使用@RequestBody和post请求解决。

以上是关于Feign的主要内容,如果未能解决你的问题,请参考以下文章

HTTP调用(二):feign调用的超时

Feign自定义配置详解

SpringCloud http客户端Feign -- Feign替代RestTemplate

SpringCloud系列六:Feign接口转换调用服务(Feign 基本使用Feign 相关配置)

Feign 最佳实现方案探究

SpringCloud技术专题「Feign」从源码层面让你认识Feign工作流程和运作机制