链接 : spring社区 http://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-feign
github https://github.com/OpenFeign/feign
简书 http://www.jianshu.com/p/46ef7e378aa0
原理:通过@EnableFeignClient注解开启@FeignClient
再具体接口上添加@FeignClient注解,并添加配置类和server名称
程序启动后,spring会自动扫描所有注解,并构建Bean添加到IOC容器中
当接口方法被调用时,请求会被拦截,之后jdk通过代理根据请求参数生成一个RequestTemplate(http请求的模板),并调用方法执行这个模板获得http请求的response
执行的过程是,由RequestTemplate生成Request,并交给Client处理
Client组件是用来发送请求的客户端,Client可以由HttpUrlConnection,HttpClient, OkHttp实现,默认为HttpUrlConnection。
我们可以通过更改Feign的配置来自己定制Client,Client被封装到LoadBalanceFeignClient实现负载均衡
配置:对于每一个被@FeignClient注解了的接口,我们可以添加自己定制的配置类修改默认的配置项。自定义的配置会覆盖默认配置项。为了防止配置被扫描导致所有接口都被 覆盖,实现的配置类最好放在不同的package中。
默认实现的配置Bean有: Decoder, Encoder, Logger, Contract Feign.Builder
可自己添加的配置Bean有: Logger.Level , Retryer, ErrorDecoder, Request.Options, Collection<RequestInterceptor>
各配置项的解释:http://blog.csdn.net/zheng0518/article/details/65635357
Feign与Ribbon
Feign自动实现Ribbon的负载均衡。实现原理是当负责发送请求的Client准备就绪后,会被封装到LoadBalancerFeignClient类中。
这个类实现了Ribbon的负载均衡。