Consul和ZooKeeper的区别

Consul和ZooKeeper的区别,第1张

open feign30开始就不支持Ribbon了
所以只能用loadbalancer
spring-cloud-loadbalancer 官网文档

首先说明一下
spring cloud loadbalancer 是可以单独使用的
但通常我们会和consul等注册中心一起使用
这样我们就不用写死配置了(配置集群里面有哪些服务)
还有这个版本与OpenFeign 和 consul配合使用是不需要做任何配置的

并且spring-cloud-loadbalancer 是 spring-cloud-commons的一个子项目

springfactories

功能:

首先在spring-cloud-commons包下也有个叫LoadBalancerAutoConfiguration的配置类,这个配置类会在它前面执行
功能:

请先读一下这篇文章: spring boot open feign 客户端调用过程
会知道OpenFeign发起请求前会调用BlockingLoadBalancerClientchoose选择一个服务端
上面也提到了BlockingLoadBalancerClient 它的加载过程。
接下来看看它的 实现

从 loadBalancerClientFactory 里取得服务列表
但我们提到了,我们并没有主动的创建服务器列表。
而是通过consul取得的,那么是什么时候取得的呢?
读一下: spring boot consul 客户端加载过程
我们能知道 consul是在web服务器启动完成后,才向注册中心发起注册的
也就是在这之前LoadBalancerClientFactory 一直是空的

所以是调用choose方法的时候才去拉取consul 上的服务器列表
所以我们看下:ReactiveLoadBalancerchoose
它是一个接口,看一下它有哪些实现

共两个实现:
1,RoundRobinLoadBalancer
2,RandomLoadBalancer
这里的ReactiveLoadBalancer实际上是RoundRobinLoadBalancer(默认的)

但我们在
spring-cloud-loadbalancer的springfactories
并没有发现RoundRobinLoadBalancer的初始化
不过我们发现它是从
loadBalancerClientFactory里取出来的

继承自:NamedContextFactory:真正创建ReactiveLoadBalancer对象
实现了:ReactiveLoadBalancerFactory。看名字就知道,它就是用来创建ReactiveLoadBalancer 的,但它是委托给了NamedContextFactory 来做的

看一下NamedContextFactory是怎么做的

可以看到
先getContext(name)
没有的化就createContext

然后就是这句

defaultConfigType是LoadBalancerClientConfiguration

context将LoadBalancerClientConfiguration注册到上下文环境中
然后contextrefresh();
LoadBalancerClientConfiguration的对象就创建出来了(springfatories里是没有它的)

可以看到 这里创建了 RoundRobinLoadBalancer

为什么要用NamedContextFactory这样创建
因为,道理很简单,spring-cloud-balancer要为每一个rpc客户端创建一个自己的上下文环境包含自己的配置

用服务名去取,这个serviceId在OpenFeign, Loadbalancer,Consul里是一致的

然后这里还创建了ServiceInstanceListSupplier
看这句,创建这个类的时候用到了DiscoveryClient,还把它们缓存了起来
这里context:ConfigurableApplicationContext包含ConsuDiscoveryClient

这里用到了BiFunciton,大家可以自己去查一下怎么用

DiscoveryClientServiceInstanceListSupplier
这里还用到了 Flux
大家可以自己去看

主要是这句

这里的delegate就是ConsulDiscoveryClient

然后就回到RoundRobinLoadBalancer
这个类其实很简单,就是取到服务器列表,然后一个简单的轮询


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10578119.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-09
下一篇 2023-05-09

发表评论

登录后才能评论

评论列表(0条)

保存