Я пишу несколько простых микросервисов, чтобы понять, как работает Netflix Eureka.
Мне было интересно, существует ли общая возможность программного отключения службы в Java с немедленной отменой регистрации в реестре служб Eureka в результате.
Я нашел решение с конечной точкой привода Spring Boot (с запросом POST к service-URL/actuator/shutdown
).
Как можно добиться того же результата, если я хочу отключить службу, не основанную на Spring Boot?
Завершить работу службы вне Spring Boot
Ответы (1)
очень абстрактным образом, каждый процесс, который работает бесконечно, например, сервер, который слушает запросы, в основном представляет собой цикл while, например
while flag:
listen and process request
shutdown
- это просто API, влияющий на flag
и заставляющий программу существовать из цикла и возобновлять прямой поток, который приведет к завершению этой программы.
поэтому, чтобы отключить службу, которая не является весенней загрузкой, вам нужно создать API, который может управлять потоком кода, как указано выше.
Кроме того, spring boot
— это очень надежная и минимальная оболочка, поэтому вы можете включить загрузку Spring почти в любую службу и программу на Java.
обратите внимание, что Eureka
поддерживает ручное переопределение состояния служб, поэтому вы можете указать Eureka игнорировать и отменить регистрацию одной или нескольких служб независимо от их фактического состояния.
с большинством служб обнаружения, которые работают в пассивном режиме (не инициируйте активный контакт со службами), например, eureka
каждая служба отправляет проверку работоспособности каждый x раз, сервер обнаружения узнает, что служба находится в автономном режиме, только по истечении x времени и работоспособности требуется проверка (есть и другие параметры, такие как пороги и специальные режимы работы, которые также принимаются во внимание)
Я отсылаю вас к этому сообщению для получения дополнительной информации о контроле скорости выселения "spring-boot-eureka"
(особенно последнего комментарий)