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添加攔截器,進而交給負載均衡器去處理。接口