eureka.instance.instance-id 和 eureka.instance.metadataMap.instanceId 有啥区别?

Posted

技术标签:

【中文标题】eureka.instance.instance-id 和 eureka.instance.metadataMap.instanceId 有啥区别?【英文标题】:What is the difference between eureka.instance.instance-id and eureka.instance.metadataMap.instanceId?eureka.instance.instance-id 和 eureka.instance.metadataMap.instanceId 有什么区别? 【发布时间】:2020-02-03 20:46:26 【问题描述】:

eureka.instance.instance-ideureka.instance.metadataMap.instanceId有什么区别?我在同一主机(本地主机)上运行了 2 个相同服务的实例并拥有一个唯一的 instanceId,我尝试了 eureka.instance.instance-id 和 eureka.instance.metadataMap.instanceId。这两个属性都运行良好,并且服务实例已成功注册到 eureka 服务器。

我在下面的帖子中找到了两个选项

how to create multiple instances of eureka services registered into eureka service registry?

那么,它们之间有什么区别,我应该在哪里使用这些属性?

【问题讨论】:

【参考方案1】:

没有这样的。我们可以同时使用:)。

当 eureka 服务器在注册客户端时询问 instanceId 时,它会得到什么-

@Override
public String getInstanceId() 
    if (this.instanceId == null && this.metadataMap != null) 
        return this.metadataMap.get("instanceId");
    
    return this.instanceId;

因此,如果您使用 eureka.instance.instance-id 设置它,它会返回相同的值,否则它会尝试从元数据(使用 eureka.instance.metadataMap.instanceId 设置)中查找 instanceId。

您可以查看 EurekaInstanceConfigBean 类了解更多详情。

【讨论】:

这很有用。只是为了添加到我们应该使用 eureka.instance.metadataMap.* 我在 EurekaInstanceConfigBean 类中找到的 /** * 获取与此实例关联的元数据名称/值对。此信息 * 被发送到 eureka 服务器,可供其他实例使用。 */ 私有 Map metadataMap = new HashMap();另外,关于动态元数据的有用博客https://blog.codecentric.de/en/2018/01/spring-cloud-service-discovery-dynamic-metadata/

以上是关于eureka.instance.instance-id 和 eureka.instance.metadataMap.instanceId 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud

SpringCloud Zuul路由转发原理及源码解析