* 源码分析
*
* Feign是一个伪java http客户端。Feign不做任何请求处理,Feign通过处理注解生成Request模板,从而简化Http api开发。开发人员可以使用注解
* 定制Request API模板。在发送http request之前,feign通过处理注解的方式替换掉Request模板中的参数,生成真正的request交给java hppt客户端
* 去处理。这样开发人员不用关心http请求本身,只需要关注Feign注解模板开发
* 1.程序启动时先去找到是否@EnableFeignClients注解开启包扫描,
* 2.然后去扫描@FeignClient修饰的接口类
* 3.将接口名和注解信息一起取出赋给BeanDefinitionBuilder再得到BeanDefinition注入到ioc容器中。
* 4.当调用接口中的方法时,会被拦截,生成RequestTemplate对象,
* 5.然后RequestTemplate对象生成http的request对象;
* 6.request对象交给Client去处理,网络请求框架可以是httpURLConnnection,HttpClient和okhttp
* 最后Client被封装到LoadBalanceClient类结合Ribbon做均衡负载
*
* @FeignClient
* 注解用于创建声明式API接口,该接口是RESTful风格的,feign被设计成插拔式,可注入其他组件和Feign一起使用最典型的就是Ribbon负载均衡组件。
*源码:
* FeignClient被@Target({ElementType.TYPE})修饰,表明作用于接口
* @Retention(RetentionPolicy.RUNTIME) 表明该注解会在class字节码文件中存在,在运行时通过反射得到
* @Documented 表示该注解被包含在javadoc之中
*name和value一样,是被调用服务的ServiceID;configuration指明配置类,默认的配置类为FeignClientsConfiguration
* 缺省情况下,这个类默认注入了Decoder,Encoder,Contrack等配置的bean;fallback为配置熔断器的配置类
*
*/
/**
* feign使用Client组件,默认使用httpURLConnnection来实现网络请求
* 也可以使用HttpClient和okhttp实现
* 方式:
* 配置feign.httpClient.enabled=ture;
* 加入相关依赖
*/
用法
/**
* 1.依赖 spring-cloud-starter-feign
*
* 2.注解 @EnableFeignClients
*
* 3.创建调用interface
* 注解@FeignClient(value = "Eureka-Client",configuration = FeignConfig.class)
* value:调用服务名
* configuration:调用配置类
*/