我们将 Spring Cloud Angel.SR6 与 Netflix Eureka 和 Spring Config Server 一起使用。我们的一个微服务是一个分布式系统,它使用 Eureka 作为发现机制来寻找对等点。为了在多个实例并行启动时以正确的方式启动系统,我们想知道哪个节点先启动。Eureka 中的应用程序信息包含几个不同的时间戳,但是当 Eureka 客户端更新状态时它们会发生变化,因此我们似乎无法依赖它们。
我们现在的想法是让应用程序在 Eureka 中注册自己的启动时间戳metadataMap
,我们已经能够使用EurekaInstanceConfigBean
. 然而,使用这种方法,时间戳在过程中添加得太晚了。这些实例最初出现在 Eureka 中没有时间戳,这对我们来说还不够好(即使是这样,也需要很长时间才能成为一个好的解决方案)。
我们正在尝试做的是获取包含在初始 Eureka 注册中的时间戳。声明的属性bootstrap.properties
包括在内,所以如果我们能以某种方式在此处获取时间戳,一切都会正常工作:
eureka.instance.metadataMap.bootTimestamp=<here we want the timestamp>
我们尝试使用Spring Cloud 文档PropertySourceLocator
中提到的方法添加自定义,但仍然没有运气。初始 Eureka 注册发生在 PropertySourceLocator 初始化之前,这再次为时已晚。
我们如何才能在初始 Eureka 注册之前将启动时间戳放入环境中,这样应用程序就不会在没有时间戳的情况下出现在 Eureka 中?