获取 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。
干杯!
我想知道是否存在一种方法让 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。
干杯!