Отметка времени запуска в метаданных Eureka

Мы используем 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 без метки времени?


person Jon Ekdahl    schedule 21.06.2016    source источник


Ответы (1)


Мы нашли не совсем удовлетворительный обходной путь, поэтому я публикую его, если кто-то находит его полезным. Передавая метку времени в переменной среды или системном свойстве, мы можем включить ее в первоначальную регистрацию метаданных в Eureka.

Командная строка (при условии Linux/bash):

BOOT_TIMESTAMP=$(date +%s%3N) java ...

bootstrap.properties:

eureka.instance.metadataMap.bootTimestamp=${boot.timestamp:0}
person Jon Ekdahl    schedule 22.06.2016