从单个主机注册Spring Boot Eureka Client的多个实例

在自述这个回购已更新,以证明接受的答案的解决方案。


我正在根据此指南使用Spring Boot Eureka服务注册和发现的简单示例。

如果我启动一个客户端实例,它会正确注册,并且可以通过看到自己DiscoveryClient。如果我使用另一个名称启动另一个实例,它也可以正常工作。

但是,如果我启动两个具有相同名称的实例,则仪表板仅显示正在运行的一个实例,而DiscoveryClient仅显示第二个实例。

当我杀死第二个实例时,第一个实例可以通过仪表板和发现客户端再次看到。

以下是有关我正在执行的步骤以及所看到的内容的更多详细信息:

启动服务器

cd eureka-server

mvn spring-boot:run

访问http://

localhost:8761的Eureka仪表板

请注意,还没有注册“实例”

启动客户端

cd eureka-client

mvn spring-boot:run

直接通过http:// localhost:8080

/访问客户端

/whoami终端将展示其应用程序名称和端口的客户端的自知之明

{

"springApplicationName":"eureka-client",

"serverPort":"8080"

}

/instances端点将需要长达一分钟更新,但最终应该会显示所有的情况下,eureka-client已登记的尤里卡发现客户端。

[   

{

"host":"hostname",

"port":8080,

"serviceId":"EUREKA-CLIENT",

"uri":"http://hostname:8080",

"secure":false

}

]

您现在也可以再次访问Eureka dashoboard,并在其中列出。

您可以通过执行以下操作看到另一个客户端将被注册:

cd eureka-client

mvn spring-boot:run -Dspring.application.name=foo -Dserver.port=8081

/whoami终端将显示名称foo和端口8081

一分钟左右,/instances端点也将显示有关此foo实例的信息。

现在,在Eureka仪表板上,将注册两个客户。

现在尝试eureka-client通过仅重写port参数来生成另一个实例:

cd eureka-client

mvn spring-boot:run -Dserver.port=8082

/whoami端点http://localhost:8082显示了我们的期望。

一分钟左右,/instances端点现在还显示了在端口8082上运行的实例,但是由于某种原因,它没有显示在端口8080上运行的实例。

而且,如果我们检查/instances端点,http://localhost:8080我们现在也只会看到在8082上运行的实例(即使很明显,在8080上的实例也正在运行,因为这正是我们所要的。

Eureka仪表板仅显示1个eureka-client正在运行的实例。

这里发生了什么?

让我们尝试杀死运行在8082上的实例,看看会发生什么。

当我们/instances在8080上查询时,它仍然只在8082上显示实例。

但是一分钟后,这种情况消失了,我们再次在8080上看到了该实例。

问题是,为什么我们都看不到eureka-client它们都在运行的两个实例?

回答:

对于本地部署,请尝试

(如果使用基于Spring Cloud的安装程序,请为正确的yaml文件

)。它深深植根于Eureka服务器计算应用程序列表并比较PeerAwareInstanceRegistryImpl的InstanceInfo的方式中-

当没有更多具体数据(例如:实例元数据可用)时,它们尝试从主机名获取ID。

不过,我不建议将其用于AWS部署,因为搞乱instanceId会给您带来麻烦,让您难以确定哪个机器托管特定服务-

另一方面,我怀疑您是否会在一台计算机上托管两个相同的服务,对吗?

以上是 从单个主机注册Spring Boot Eureka Client的多个实例 的全部内容, 来源链接: utcz.com/qa/426964.html

回到顶部