Мы используем 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>
Мы попытались добавить пользовательское PropertySourceLocator
, используя подход, упомянутый в Документация Spring Cloud, но все равно не повезло. Первоначальная регистрация Eureka происходит до инициализации PropertySourceLocator, что опять же слишком поздно.
Как мы можем получить метку времени загрузки в среде до первоначальной регистрации Eureka, чтобы приложение никогда не отображалось в Eureka без метки времени?