我想知道Eureka客户端是否存在一种方式来了解它的实际instanceId(我正在寻找一种既可以在同一主机上也可以在分布式conf中工作的解决方案)。
到目前为止,我使用的是我手动定义的eureka.instance.instance-id: ${spring.application.name}:${random.int}
,但每次我访问它时,由于随机而得到一个新值。因此,它将始终与在注册时生成并提供给服务器的那个不同。
答案 0 :(得分:4)
是的,RandomValuePropertySource是无状态的,因此每次访问该属性时都会获得新值。
首先,您可能要考虑使用host:port作为instanceId,那里没有随机性。
如果这还不够好,请注入EurekaInstanceConfigBean并获取instanceId。 (需要一些测试)
最好是在SpringApplication.run之前设置instance-id自己有一个系统属性。
答案 1 :(得分:1)
我有点简单的解决方案,因为我想从属性文件中获取正在使用的id。
@Autowired
EurekaClient eurekaClient;
eurekaClient.getApplicationInfoManager().getInfo().getInstanceId();
答案 2 :(得分:0)
这可能是旧的,但我理解这种挫败感。
ServiceInstance
将无法获取实例 ID,因为它是一个接口。
我的解决方案是
@Autowired
EurekaClient eurekaClient;
....
eurekaClient.getInstancesById("id); // in which would return a List<InstanceInfo>
//thus you would be able to access instanceId from InstanceInfo.
希望这有帮助!另外,不要忘记 EurekaClient 应该在相关模块的范围内进行配置。
干杯!