我是靠谱客的博主 纯真航空,最近开发中收集的这篇文章主要介绍eureka 自定义defaultZone无效问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

eureka.client.service-url.defaultZone为什么自定义地址失效?
累计花费三四个小时,甚至clone了spring-cloud-netflix项目源码,终于被我发现了!

serviceUrl本身是个hashmap,初始化的时候会默认8761端口。
在这里插入图片描述
之后会读取yml(或properties)里serviceUrl下面的所有字段(键值对) 存到这个map里。
在这里插入图片描述
因为是存的是键值对,所以它并不能帮你检查拼写错误。
在这里插入图片描述
就算你在里面写了阿猫阿狗,都不会有任何错误提示(在其他对象里写了错误的属性,idea会有淡黄色背景色提醒)
在这里插入图片描述
接下来就很好解释为什么serviceUrl和service-url能通用,而defaultZone不能写成default-zone了。
首先要获得一个AwsEndpoint实例,它继承了DefaultEndpoint.
在这里插入图片描述
它的serviceURI是在这里得到的:
在这里插入图片描述
这个方法点进去看,发现它是根据zone去serviceUrl map里取值,而zone的值(即要查的map的key)就是defaultZone
在这里插入图片描述
假使zone字符串是个空值,或者在map里查到空值,也会默认去查defaultZone。所以这个属性必须写成 “defaultZone: xxxx " 差一个字符都不行。
在这里插入图片描述
补充一下,为什么zone会是 “defaultZone”?
zone是从availZones里拿的。availZones会从config的availabilityZones里拿,按逗号分隔;如果没有,就返回 “defaultZone” (这点在getAvailabilityZones方法和getAvailabilityZones下面的if语句中都有保证)。
我这里没有配置availabilityZones,所以availZones就只能拿到defaultZone。
在这里插入图片描述
在这里插入图片描述
getZoneOffset方法是遍历availZones数组,查询instanceZone在数组中的位置,如果查不到,就返回下标0(相当于缺省值)。这里的instanceZone的值是"defaultZone"这也是为什么最后zone会得到"defaultZone”。instanceZone的值是方法调用的时候传进来的。
在这里插入图片描述
接下来看为什么instanceZone是"defaultZone"
首先是getAvailabilityZones方法,之前已经分析过了,因为没有配置availabilityZones,所以会拿到一个只有"defaultZone的数组"
instanceZone
getZone方法会返回availZone的第一个值(如果没有,返回"default")。下面的判断条件只有在name=Amazon的时候才会成立,所以可以忽略。根据上文,我们的availZone只有一个值{“defaultZone”},这就是instanceZone的值为"defaultZone"的原因
在这里插入图片描述

最后补充一下,读取eureka endpoints有DNS和config两种方式。上面所说的都是在选择config的情况下。在这里插入图片描述

最后

以上就是纯真航空为你收集整理的eureka 自定义defaultZone无效问题的全部内容,希望文章能够帮你解决eureka 自定义defaultZone无效问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部