获取 Eureka 实例 ID

Get Eureka instance Id

我想知道是否存在一种方法让 Eureka 客户端知道它实际的 instanceId(我正在寻找一种既适用于同一主机又适用于分布式配置的解决方案)。

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

是的,RandomValuePropertySource 是无状态的,因此每次访问 属性 时都会获得新的值。

首先,您可能要考虑使用 host:port 作为 instanceId,那里没有随机性。

如果这还不够好,请注入 EurekaInstanceConfigBean 并获取 instanceId。 (需要一些测试)

最好在SpringApplication.run.

之前自己设置instance-id有系统属性

我有一些简单的解决方案,因为我想从 属性 文件中获取正在使用的 ID。

    @Autowired
EurekaClient eurekaClient;

eurekaClient.getApplicationInfoManager().getInfo().getInstanceId();

这可能是旧的,但我理解这种挫败感。

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。

干杯!