美文网首页
Feign + Ribbon + Eureka 结合使用的逻辑

Feign + Ribbon + Eureka 结合使用的逻辑

作者: zekers | 来源:发表于2020-11-22 00:11 被阅读0次

    一、图解

    Feign + Eureka + Ribbon.png

    二、说明

    这里将重点分为5点,具体如下:

    1. 注册FeignClient工厂Bean

    为注释了FeignClient的接口注册一个FeignClientFactoryBean,之后便可以被注入到其他的Bean中;

    2. 生产动态代理对象

    FeignClientFactoryBean利用Feign.builder生产出动态代理对象;

    3. Eureka客户端获取实例

    Eureka客户端会定期从Eureka服务端拉取最新的服务列表,Eureka客户端是由Spring注入;

    4. Eureka服务端维护列表

    Eureka服务端的实例列表是由一个二级缓存ResponseCache和一个注册表ConcurrentHashMap构成,通过各种由Resource类映射的Rest接口维护,Eureka服务端是由Spring注入并在容器的生命周期方法中初始化和启动;

    5. 调用动态代理对象接口

    5.1 提交Feign请求

    动态代理对象调用接口方法,方法被封装成一个Feign请求提交给Feign客户端,Spring整合了Feign和 Ribbon的代码后,LoadBalancerFeignClient作为一个Feign客户端接受请求。

    5.2 提交负载均衡请求

    LoadBalancerFeignClient客户端将请求封装为Ribbon的负载均衡请求并提交给负载均衡客户端,Spring 整合了Ribbon 和 Feign的代码,FeignLoadBalancer 作为一个负载均衡客户端接受请求

    5.3 负载均衡器选择服务实例

    负载均衡客户端使用负载均衡器ILoadBalancer选择服务实例,整合了Eureka的代码后,DiscoveryEnabledNIWSServerList为负载均衡器提供服务实例列表,DiscoveryEnabledNIWSServerList 持有Eureka客户端实例

    5.4 执行Feign请求

    延续第5点,负载均衡客户端选出服务实例后,将请求封装为Feign提交给Feign客户端,这里的Feign客户端不再是LoadBalancerFeignClient,而是实际执行远程访问的feign客户端,如Client.Default/ApacheHttpClient/OkHttpClient

    5.5 获取Feign请求结果并解码

    feign客户端执行请求后返回feign响应,feign响应最终通过解码,将请求结果返回给调用方法,整个流程结束

    相关文章

      网友评论

          本文标题:Feign + Ribbon + Eureka 结合使用的逻辑

          本文链接:https://www.haomeiwen.com/subject/rdbyiktx.html