Понимание порога самосохранения и обновления Spring Cloud Eureka Server
Я новичок в разработке микросервисов, хотя некоторое время изучал их, читая как документы Spring, так и документы Netflix.
Я начал простой проектдоступно на Github, В основном это сервер Eureka (Archimedes) и три клиентских микросервиса Eureka (один публичный API и два частных). Проверьте readme GitHub для подробного описания.
Дело в том, что когда все работает, мне бы хотелось, чтобы в случае уничтожения одного из частных микросервисов сервер Eureka обнаружил и удалил его из реестра.
I нашел этот вопрос на Stackoverflowи решение проходит с помощьюenableSelfPreservation:false
в конфигурации сервера Eureka. Делая это через некоторое время, убитый сервис исчезает, как и ожидалось.
Однако я вижу следующее сообщение:
РЕЖИМ САМОРЕГУЛИРОВАНИЯ ОТКЛЮЧЕН. ЭТО МОЖЕТ НЕ ЗАЩИЩАТЬ СРОК ГОДНОСТИ В СЛУЧАЕ СЕТИ / ДРУГИХ ПРОБЛЕМ.
1. Какова цель самосохранения?доктор утверждает, что с самосохранением на«клиенты могут получить экземпляры, которые больше не существуют», Так, когда это желательно включить / выключить?
Кроме того, если включено самосохранение, в консоли Eureka Server может появиться сообщение с предупреждением:
ЧРЕЗВЫЧАЙНАЯ СИТУАЦИЯ! EUREKA МОЖЕТ БЫТЬ НЕПРАВИЛЬНО ПРЕТЕНЗУЮЩИМ МОМЕНТАМИ, КОГДА ОНИ НЕТ ОБНОВЛЕНИЯ МЕНЬШЕ, ЧЕМ ПРЕДПОЛАГАЕТСЯ, И ПОЧЕМУ МОМЕНТЫ НЕ БЫЛИ СРОЧНЫ, ПРОСТО БЕЗОПАСНЫ.
Теперь перейдем к Spring Eureka Console.
Lease expiration enabled true/false
Renews threshold 5
Renews (last min) 4
Я столкнулся со странным поведением количества порогов: когда я запускаю только сервер Eureka, порог равен 1.
2. У меня один сервер Eureka, и он настроен наregisterWithEureka: false
чтобы предотвратить его регистрацию на другом сервере. Тогда, почему это появляется в пороговом количестве?
3. Для каждого клиента я начинаю увеличивать пороговое значение на +2. Я думаю, это потому, что они отправляют 2 сообщения в минуту, я прав?
4. Сервер Eureka никогда не отправляет обновление, поэтому последние обновления всегда ниже порогового значения. Это нормально?
renew threshold 5
rewnews last min: (client1) +2 + (client2) +2 -> 4
Сервер cfg:
server:
port: ${PORT:8761}
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
server:
enableSelfPreservation: false
# waitTimeInMsWhenSyncEmpty: 0
Клиент 1 cfg:
spring:
application:
name: random-image-microservice
server:
port: 9999
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
healthcheck:
enabled: true