Netflex Eureka服务注册如何获取注册中心地址
来源:互联网 发布:who生长曲线图软件 编辑:程序博客网 时间:2024/04/29 18:55
Netflex Eureka服务注册
Netflex服务注册主要是DiscoveryClient.java类来实现
获取注册中心地址
服务客户端要注册到注册中心,首先需要知道注册中心的地址
在DiscoveryClient类中找到如下方法:
该方法已过时,会调用EndpointUtils.getServiceUrlsFromConfig(clientConfig,instanceZone, preferSameZone)
该方法有三个参数:
clientConfig:客户端配置类(配置文件)
instanceZone:客户端所在的zone
preferSameZone:如果为True,将选择与客户端所在同一个zone的注册中心
getServiceUrlsFromConfig方法解析
1、首先我们可以看到调用getRegion方法,返回了客户端所在的region,一个微服务应用只属于一个region,默认是default,可以通过eureka.client.region设置
2、接下来调用了clientConfig.getAvailablityZones(clientConfig.getRegion()),该方法是通过客户端的region返回所有可用的改region下的人zone,region和zone是一对多的关系。
返回的是一个String数组
3、如果返回的zone的数组为空,说明该region下没有可用的zone,那就给他一个默认的zone
4、现在我们已经拿到客户端的region、所有该region的zone,接下来就要加载Eurekaserver的具体地址了。
首先调用了getZoneOffset(instanceZone,preferSameZone,availZones),该方法的作用是:返回要使用的zone在刚才获取的该region下所有的zone数组的位置,返回的是一个int型。
5、知道了需要使用的zone之后,就可以获取serviceUrl了,返回的是一个String的List,因为一个zone可以有多个serviceUrl,将这个list加入到orderdUrls中,orderdUrl是方法最开始创建的一个List<String>
6、接下来这一步最为关键(看了好久才明白),我先把源码贴出来
其实getServiceUrlsFromConfig方法不仅仅是返回与客户端相同zone的serviceUrl,而是将所有的zone的serviceUrl全部获取,只不过是与客户端相同zone的serviceUrl放到List<String>的前面,其他的zone的serviceUrl会加入到该List中。
下面来详细说一下:我会举一个例子。
如果availZone中只有一个zone,而且是客户端相同的zone,上面的这段代码就会跳过了,因为没有其他的zone,也就没有serviceUrl了。
首先假如我们availZone = [“zone1”,”zone2”,”zoneClient”,”zone4”],当前region的可用zone有4个,恰好与客户端相同的zone在availZone的第三个位置,
看下这段代码:
他的意思是:如果myZoneOffset不是availZone数组的最后一个值时,currentOffSet = myZoneOffset+1,否则currentOffSet = 0(为了遍历availZone)
此时我们可以得到下列变量的值:
myZOneOffset= 2
currentOffSet= 3
然后我们继续看while循环,很显然我们满足循环条件,然后调用clientConfig.getEurekaServerServiceUrls(availZones[3])方法,可以看出我们获取了第四个zone的所有serviceUrl,并把他们加到orderdUrls中。
此时我们已经遍历了availZone数组的最后一个值,但是现在availZone的前两个值的zone的serviceUrl还没有获取到,继续看代码
这里面有个if条件,意思是如果当前的currentOffSet是availZone的最后一个值,那么就讲currenOffSet设置为0,否则currentOffSet就继续加一。
到这里就可以从头开始遍历了,一直到currentOffSet =myZoneOffSet
最后,所有的zone的serviceUrl都被获取到了。
- Netflex Eureka服务注册如何获取注册中心地址
- Spring Cloud 基于eureka 服务注册中心
- mpc-discovery-eureka(服务注册中心)
- (1) 服务治理Eureka注册中心
- Eureka 注册中心服务列表消失
- 【Spring Cloud】Eureka服务注册中心搭建
- 七、Netflix Eureka && 搭建服务注册中心
- 2.服务注册中心(Eureka服务注册与发现)
- 微服务基础设施之服务注册中心: Spring Cloud Eureka
- Spring Cloud系列一 之 eureka服务注册中心
- SpringCloud微服务系列(1): 创建Eureka服务注册中心
- spring-cloud之eureka注册中心及服务发布
- Spring Cloud Eureka 入门 (一)服务注册中心详解
- 【Spring Cloud】一、Eureka Server 服务注册中心服务端启动
- Spring Cloud Eureka 服务注册与发现中心(一)
- springcloud入门之使用eureka搭建服务注册中心
- Spring Cloud (19) | Eureka Server 高可用服务注册中心
- spring cloud快速入门教程(二)服务注册中心Eureka
- 安卓与JS交互
- 基本类型的类型转换
- Oculus Rift第二代?到明年也依然是不存在的
- MySql 中 case when then else end 的用法
- Springboot--springmvc Required request body content is missing异常
- Netflex Eureka服务注册如何获取注册中心地址
- Android解析后台给的Html格式的图文结合的数据,只需一个TextView就能展示。
- 使用gcc中的__attribute__指定字节对齐
- 完全理解 Python 迭代对象、迭代器、生成器
- [Python]
- 高并发
- ReactJs学习
- 上传的图片怎么存储?(Tomcat 服务器映射目录配置)
- 115.231.236.33快快网络嘉兴稳定80G防,50M独享,最低仅需799