更新
本回购协议中的自述文件已更新,以在公认的答案中演示解决方案。
我正在使用一个基于本指南的springboot eureka服务注册和发现的简单示例。
如果我启动一个客户机示例,它将正确注册,并且可以通过 DiscoveryClient
. 如果我用另一个名称启动第二个示例,它也可以工作。
但是如果我用相同的名称启动两个示例, Jmeter 板只显示一个正在运行的示例,而 DiscoveryClient
只显示第二个示例。
当我杀死第二个示例时,通过 Jmeter 板和发现客户机可以再次看到第一个示例。
以下是关于我正在采取的步骤和我看到的情况的更多细节:
Eureka 服务器
启动服务器
cd eureka-server
mvn spring-boot:run
访问eureka Jmeter 板http://localhost:8761
请注意,尚未注册任何“示例”
Eureka 客户
启动客户机
cd eureka-client
mvn spring-boot:run
直接访问客户http://localhost:8080/
这个 /whoami
端点将显示客户端对其应用程序名称和端口的自我了解
{
"springApplicationName":"eureka-client",
"serverPort":"8080"
}
这个 /instances
端点将需要一分钟来更新,但最终应该显示 eureka-client
已在eureka discovery客户端注册的。
[
{
"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 Jmeter 板上,现在将注册两个客户机。
启动另一个同名客户机
现在试着旋转另一个 eureka-client
仅通过覆盖端口参数:
cd eureka-client
mvn spring-boot:run -Dserver.port=8082
这个 /whoami
的终结点 http://localhost:8082
显示了我们的期望。
大约一分钟后 /instances
endpoint现在也显示在端口8082上运行的示例,但是由于某些原因,它没有显示在端口8080上运行的示例。
如果我们检查一下 /instances
上的终结点 http://localhost:8080
我们现在也只看到在8082上运行的示例(尽管很明显,8080上的示例正在运行,因为这正是我们所要求的。
eureka Jmeter 板仅显示 eureka-client
跑步。
这是怎么回事?
让我们尝试终止8082上运行的示例,看看会发生什么。
当我们询问 /instances
在8080上,它仍然只显示8082上的示例。
但一分钟后,它消失了,我们又看到了8080上的示例。
问题是,为什么我们不能同时看到 eureka-client
当他们都跑的时候?
2条答案
按热度按时间jexiocij1#
对于本地部署,请尝试在eureka-client.properties中配置{namespace}.instanceid属性(如果是基于spring云的安装,请在eureka.instance.metadatamap.instanceid中配置适当的yaml文件)。它深深植根于eureka服务器计算应用程序列表和比较peerawareinstanceregistryimpl的instanceinfo的方式—当没有更多具体数据(例如:示例元数据可用)时,他们会尝试从主机名获取id。。
不过,我不建议将其用于aws部署,因为混淆instanceid会给您带来麻烦,无法确定哪台计算机承载特定的服务-另一方面,我怀疑您是否会在一台计算机上承载两个相同的服务,对吗?
5rgfhyps2#
通过在eureka配置文件中设置唯一的euraka.instance.hostname,可以在管理门户中显示所有示例。
主机名用作在com.netflix.discovery.shared.application中存储instanceinfo的密钥(因为没有设置uniqueidentifier)。所以你必须使用唯一的主机名。在这种情况下测试ribbon时,您会发现负载不会平衡。
下面是application.yml的示例:
这是一个错误之前在Eureka ,你可以检查进一步的信息https://github.com/codecentric/spring-boot-admin/issues/134