Netflex Eureka服务注册如何获取注册中心地址

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都被获取到了。


大家要是想买书的话,可以加我的微信15313876221,或者qq1010893356,或者qq群376448087,比正常的要便宜,程序员你懂得,买个书动不动就100多。^-^

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值