Spring Eureka中的instanceid是什么?

11

我读到过Eureka Clients的实例ID必须是唯一的,当我们想要运行多个相同Eureka Client的实例时,我们需要添加此属性:

eureka.instance.instance-id==${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${random.value}}

实例 ID 的意义是什么?上面的行与其有何关系?

2个回答

15
一个Eureka客户端有一个应用程序ID和一个实例ID。应用程序ID是应用程序的名称,而实例ID是与客户端实例相关联的唯一ID。
这有助于Eureka服务器区分相同应用程序的不同客户端实例。在您的示例中,下面显示的行为您的应用程序设置一个格式为“<客户端主机名>:<客户端应用程序名称>:<某些随机数>”的唯一实例ID。
eureka.instance.instance-id==${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${random.value}}
在我的下面的示例中,实例ID的格式为- <主机名>:<应用程序ID>:<端口>。 下面显示的Eureka REST操作将更改具有应用程序ID为AUTHOR和实例ID为10.16.6.76:author:8766的Eureka客户端的状态为OUT_OF_SERVICE
localhost:8761/eureka/apps/AUTHOR/10.16.6.76:author:8766/status?value=OUT_OF_SERVICE 

如果你注意到了,Eureka Server可以通过提供应用ID和实例ID来唯一地标识客户端。

在此输入图片描述


2
这很棒,但我如何从应用程序中读取此值?我想在登录到数据库时使用它。 - Sabareesh Kkanan

7

它用于唯一标识多个服务的单个实例。例如,如果您部署了相同的Spring Boot应用程序的两个实例,则实例ID用于区分它们。

有关使用Instance ID和PCF、AWS的其他用例可以在文档中找到。

https://cloud.spring.io/spring-cloud-netflix/multi/multi__service_discovery_eureka_clients.html

上述属性只是将其他属性组合起来。唯一需要注意的是,如果在环境中找不到spring.application_instance_id,则会使用random.value。您可以随意覆盖,但应该是唯一的。


1
我读到默认实例ID是主机:端口。所以,如果我的实例在不同的端口上运行,因此具有唯一的实例ID,那么为什么我需要像这样编辑实例ID呢? - codingsplash
如果您可以保证应用程序在不同的端口上运行并且实例ID将是唯一的,则无需担心。但是,当部署到类似PCF这样的平台时,由于每个实例的端口都会被设置,因此实例ID将会冲突。 - Darren Forsythe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接