Feign介绍
Feign是Netflix公司开源的轻量级rest客户端,使⽤Feign可以⾮常⽅便的实现Http 客户端。Spring Cloud引⼊Feign并且集成了Ribbon实现客户端负载均衡调⽤。
Feign⼯作原理如下:
1、 启动类添加@EnableFeignClients注解,Spring会扫描标记了@FeignClient注解的接⼝,并⽣成此接⼝的代理对象
2、 @FeignClient(value = \"XC_SERVICE_MANAGE_CMS\")即指定了cms的服务名称,Feign会从注册中⼼获取cms服务列表,并通过负载均衡算法进⾏服务调⽤。
3、在接⼝⽅法 中使⽤注解@GetMapping(\"/cms/page/get/{id}\"),指定调⽤的url,Feign将根据url进⾏远程调⽤。
主程序⼊⼝添加了@EnableFeignClients注解开启对FeignClient扫描加载处理。根据Feign Client的开发规范,定义接⼝并加@FeignClientd注解。
当程序启动时,回进⾏包扫描,扫描所有@FeignClients的注解的类,并且讲这些信息注⼊Spring IOC容器中,当定义的的Feign接⼝中的⽅法呗调⽤时,通过JDK的代理⽅式,来⽣成具体的RequestTemplate.当⽣成代理时,Feign会为每个接⼝⽅法创建⼀个
RequestTemplate。当⽣成代理时,Feign会为每个接⼝⽅法创建⼀个RequestTemplate对象,改对象封装可HTTP请求需要的全部信息,如请求参数名,请求⽅法等信息都是在这个过程中确定的。
然后RequestTemplate⽣成Request,然后把Request交给Client去处理,这⾥指的时Client可以时JDK原⽣的URLConnection,Apache的HttpClient,也可以时OKhttp,最后Client被封装到LoadBalanceClient类,这个类结合Ribbon负载均衡发器服务之间的调⽤。
Feign注解剖析
@FeignClient注解主要被@Target({ElementType.TYPE})修饰,表⽰该注解主要使⽤在接⼝上。它具备了如下的属性:
name:指定FeignClient的名称,如果使⽤了Ribbon,name就作为微服务的名称,⽤于服务发现。url:url⼀般⽤于调试,可以指定@FeignClient调⽤的地址。
decode404: 当发⽣404错误时,如果该字段为true,会调⽤decoder进⾏解码,否则抛出FeignException.configuration:Feign配置类,可以⾃定或者配置Feign的Encoder,Decoder,LogLevel,Contract。
fallback:定义容错的处理类,当调⽤远程接⼝失败或者超时时,会调⽤对应的接⼝的容错逻辑,fallback指定的类必须实现@Feign标记的接⼝。
fallbacjFactory:⼯⼚类,⽤于⽣成fallback类实例,通过这个属性可以实现每个接⼝通⽤的容错逻辑们介绍重复的代码。path:定义当前FeignClient的统⼀前缀。
总到来说,Feign的源码实现的过程如下:
⾸先通过@EnableFeignCleints注解开启FeignCleint根据Feign的规则实现接⼝,并加@FeignCleint注解
程序启动后,会进⾏包扫描,扫描所有的@ FeignCleint的注解的类,并将这些信息注⼊到ioc容器中。当接⼝的⽅法被调⽤,通过jdk的代理,来⽣成具体的RequesTemplateRequesTemplate在⽣成Request
Request交给Client去处理,其中Client可以是HttpUrlConnection、HttpClient也可以是Okhttp最后Client被封装到LoadBalanceClient类,这个类结合类Ribbon做到了负载均衡。
因篇幅问题不能全部显示,请点此查看更多更全内容