获取Eureka实例ID

时间:2016-10-14 13:15:37

标签: netflix-eureka spring-cloud-netflix

我想知道Eureka客户端是否存在一种方式来了解它的实际instanceId(我正在寻找一种既可以在同一主机上也可以在分布式conf中工作的解决方案)。

到目前为止,我使用的是我手动定义的eureka.instance.instance-id: ${spring.application.name}:${random.int},但每次我访问它时,由于随机而得到一个新值。因此,它将始终与在注册时生成并提供给服务器的那个不同。

3 个答案:

答案 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 应该在相关模块的范围内进行配置。

干杯!