美文网首页
gateway和openfeign的服务发现过程

gateway和openfeign的服务发现过程

作者: M_lear | 来源:发表于2023-03-01 12:28 被阅读0次

    使用nacos作为注册中心。
    spring cloud gateway、spring cloud openfeign、spring cloud loadbalancer的版本都是3.1.4。

    服务发现过程

    远程服务调用的流程:

    1. 服务消费者(gateway、openfeign)从注册中心(nacos)获取服务的服务实例列表。
    2. 服务消费者使用负载均衡策略,从若干个服务实例中选出一个目标实例。
    3. 服务消费者根据目标实例的ip、端口,重新构造请求并发起远程调用。

    在实际的实现上,一二步都封装在了负载均衡器内。
    spring cloud gateway、spring cloud openfeign都默认使用RoundRobinLoadBalancer(基于轮询的负载均衡策略,在spring cloud loadbalancer包中)。

    RoundRobinLoadBalancer的choose方法:

    image.png

    RoundRobinLoadBalancer从注册中心获取服务实例列表前,首先经过一个缓存策略。

    image.png

    默认缓存35秒。所以就算注册中心能够保证服务的秒级上下线,由于这个缓存的存在,gateway和openfeign还是可能会在一小段时间内调用已下线的服务实例。可以根据需求调整这个缓存时间。

    如果缓存中没有找到,gateway使用ReactiveDiscoveryClient接口获取服务实例列表,openfeign使用DiscoveryClient接口获取。两个接口一个是响应式的一个是非响应式的,都由spring cloud定义,nacos提供了具体的实现。

    nacos提供的两个实现中,都是通过NacosServiceDiscovery的getInstances方法从nacos服务端获取注册的服务实例列表。

    image.png

    相关文章

      网友评论

          本文标题:gateway和openfeign的服务发现过程

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