Feign的源码实现的过程以下:
首先经过@EnableFeignCleints注解开启FeignCleint
根据Feign的规则实现接口,并加@FeignCleint注解
程序启动后,会进行包扫描,扫描全部的@ FeignCleint的注解的类,并将这些信息注入到ioc容器中。
当接口的方法被调用,经过jdk的代理,来生成具体的RequesTemplate
RequesTemplate在生成Request。
Request交给Client去处理,其中Client能够是HttpUrlConnection、HttpClient也能够是Okhttp
最后Client被封装到LoadBalanceClient类,这个类结合类Ribbon作到了负载均衡缓存
新注册的实例,特别是启动较快的实例(默认延迟40秒注册),不能立刻被Eureka Server发现。另外,刚注册的Eureka Client也不能当即被其余服务调用,由于调用方由于各类缓存没有及时的获取到新的注册列表。负载均衡
Ribbon的负载均衡,主要经过LoadBalancerClient来实现的,而LoadBalancerClient具体交给了ILoadBalancer来处理,ILoadBalancer经过配置IRule、IPing等信息,并向EurekaClient获取注册列表的信息,并默认10秒一次向EurekaClient发送“ping”,进而检查是否更新服务列表,最后,获得注册列表后,ILoadBalancer根据IRule的策略进行负载均衡。代理
而RestTemplate 被@LoadBalance注解后,能过用负载均衡,主要是维护了一个被@LoadBalance注解的RestTemplate列表,并给列表中的RestTemplate添加拦截器,进而交给负载均衡器去处理。接口