Как отложить регистрацию приложения Spring в Eureka до полной инициализации приложения? - PullRequest
0 голосов
/ 29 января 2020

В моем приложении Spring я хочу выполнить некоторые подготовительные действия (например, для разогрева кешей) в ApplicationReadyEvent слушателях, прежде чем зарегистрировать его в Eureka. Проблема в том, что мое приложение стало доступным в Eureka для других приложений до того, как оно завершит всю подготовку, что может вызвать некоторые проблемы позже.

К сожалению, я не могу найти какой-либо удобный способ отложить регистрацию до полной инициализации приложения.

То, что я пробовал:

  • Я установил eureka.instance.initial-status на что угодно, кроме "вверх" (например, на "старт"), но, как я понял, Эврика проверяет здоровье в игру и устанавливает текущее состояние «вверх» даже до ContextRefreshedEvent или около того. В этом случае я могу отключить проверку работоспособности с помощью eureka.client.healthcheck.enabled = false, но позже мне нужно создать компонент EurekaHealthCheckHandler, а ApplicationReadyEvent, а затем вручную зарегистрировать его в контексте приложения.
  • Другой подход - установить spring.cloud.service-registry.auto-registration.enabled = false. Кажется, что регистрация в этом случае вызывается позже (после всех моих ApplicationReadyEvent слушателей), но bean-компонент EurekaRegistration не создается автоматически, поэтому я закончил с его созданием вручную снова (оно понадобится приложению позже).
  • Также я играл с eureka.* свойствами интервала (например, eureka.initialInstanceInfoReplicationIntervalSeconds). В этом случае вы должны быть в состоянии предсказать окончательное время, которое займет подготовка, что, на мой взгляд, ненадежно.

Таким образом, в любое время вам нужно правильно установить группу свойств и затем создать и настроить множество вещей вручную. Довольно громоздко для (я думаю) общей задачи.

Есть ли лучший подход? Может быть, я что-то упустил и решение на поверхности?

Я использую Spring Boot 2.1.9 с Spring Cloud Greenwich.

Заранее спасибо.

1 Ответ

0 голосов
/ 29 января 2020

Будет ли установка instanceEnabledOnit равной false, с начальным статусом OUT_OF_SERVICE, а затем явным заданием статуса UP после запуска приложения, решить вашу проблему?

...