Eureka集群无法同步注册的服务

Eureka集群无法同步注册的服务

今天在学习Eureka配置服务, 发现不管这么样各个Eureka节点无法同步注册的服务
到网上搜索也没有找到结果, 后来直接复制别人的配置发现就可以
对比一下我的配置就发现问题了, eureka 的配置是没法使用yaml语法 ‘-’ 配置service-url
而是需要使用 ‘,’ 进行分割才行
所以可以将这个配置替换为:

eureka:
  client:
    service-url:
      defaultZone:
        - http://localhost:8761/eureka
        - http://localhost:8762/eureka
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka,http://localhost:8762/eureka

思考为什么用 ‘-’ 配置不行

yaml语法中不就是用 ‘-’ 来写列表的吗? 为什么这里不行.
然后我找到 eureka.client.service-url 配置类 EurekaClientConfigBean 这个配置bean
找到serviceUrl发现是一个Map<String, String>类型, 既然map值的类型不是List, 那么我使用yaml的’-’ 就不会被解析成list
那会解析成什么了??, 激起了好奇心, 我决定debug看看

	private Map<String, String> serviceUrl = new HashMap<>();

找到serviceUrl的set方法打一个断点看看传进来的map是什么样子的
在这里插入图片描述
我们debug启动这个服务
在这里插入图片描述
我们发现传递进来的map分别是 defaultZone, defaultZone.0, defaultZone.1,
可以看到defaultZone, defaultZone.0都是第一个值, defaultZone.1是第二个值
如果我们使用正确的配置
在这里插入图片描述
只有一个key defaultZone , value是我们配置的两个地址

如何见map中逗号分割的地址解析成一个个eureka server的地址了??

可以发现在EurekaClientConfigBean中存在一个getEurekaServerServiceUrls的方法, 见名知意, 获取eureka server的urls
我们在这个方法上打一个断点看看
在这里插入图片描述
这个中获取 serviceUrl 就是我们配置的那个, 然后根据参数myZone取出结果, 如果没有就用DEFAULT_ZONE
实际上myZoneDEFAULT_ZONE都是 defaultZone
在拿到之后, 会发现对serviceUrls 调用了一个按照 逗号分割获取数组
到这里一切都可以说的通了, 如果我是用 yaml 的 ‘-’ 配置service-url, serviceUrl这个map中
keydefaultZone 对应的 value 是 http://localhost:8761/eureka, 如果按照逗号分割还是这个
如果是按照的 ’ ,’ 分割配置的service url 这里就可以将两个地址都拿到

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值