从单个主机注册Spring Boot Eureka Client的多个实例
在自述这个回购已更新,以证明接受的答案的解决方案。
我正在根据此指南使用Spring Boot Eureka服务注册和发现的简单示例。
如果我启动一个客户端实例,它会正确注册,并且可以通过看到自己DiscoveryClient
。如果我使用另一个名称启动另一个实例,它也可以正常工作。
但是,如果我启动两个具有相同名称的实例,则仪表板仅显示正在运行的一个实例,而DiscoveryClient
仅显示第二个实例。
当我杀死第二个实例时,第一个实例可以通过仪表板和发现客户端再次看到。
以下是有关我正在执行的步骤以及所看到的内容的更多详细信息:
启动服务器
cd eureka-servermvn spring-boot:run
访问http://
localhost:8761的Eureka仪表板
请注意,还没有注册“实例”
启动客户端
cd eureka-clientmvn 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-clientmvn spring-boot:run -Dspring.application.name=foo -Dserver.port=8081
该/whoami
终端将显示名称foo
和端口8081
。
一分钟左右,/instances
端点也将显示有关此foo
实例的信息。
现在,在Eureka仪表板上,将注册两个客户。
现在尝试eureka-client
通过仅重写port参数来生成另一个实例:
cd eureka-clientmvn 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