搜索
您的当前位置:首页正文

SpringCloudFeign工作原理

来源:六九路网
SpringCloudFeign⼯作原理

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做到了负载均衡。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top