Я новичок в разработке микросервисов, хотя какое-то время изучаю их, читая как документы Spring, так и Netflix.
Я начал простой проект, доступный на Github . По сути, это сервер Eureka (Archimedes) и три клиентских микросервиса Eureka (один публичный API и два частных). Ознакомьтесь с подробным описанием в файле readme на github.
Дело в том, что, когда все работает, я бы хотел, чтобы в случае уничтожения одного из частных микросервисов сервер Eureka распознал его и удалял его из реестра.
Я нашел этот вопрос в Stackoverflow , и решение проходит с использованием enableSelfPreservation:false
конфигурации Eureka Server. После этого убитая служба исчезнет, как и ожидалось.
Однако я вижу следующее сообщение:
РЕЖИМ САМОСЕРВАЦИИ ВЫКЛЮЧЕН. ЭТО МОЖЕТ НЕ ЗАЩИТИТЬ СРОК СРОКА ИНСТАНЦИИ В СЛУЧАЕ СЕТИ / ДРУГИХ ПРОБЛЕМ.
1. Какова цель самосохранения? В документе указано, что с самосохранением «клиенты могут получать экземпляры, которые больше не существуют» . Итак, когда рекомендуется включать / выключать его?
Кроме того, когда самосохранение включено, вы можете получить выдающееся сообщение в предупреждении консоли Eureka Server:
ЧРЕЗВЫЧАЙНАЯ СИТУАЦИЯ! EUREKA МОЖЕТ БЫТЬ НЕПРАВИЛЬНО ПРЕТЕНЗИВАЕТСЯ ОБ ИСПОЛЬЗОВАНИИ ЭКЗАМЕНОВ, КОГДА ИХ НЕТ ПРОДЛЕНИЕ ДЕЙСТВИТЕЛЬНО МЕНЬШЕ, ЧЕМ ПОРОГ, И ПОТОМУ ЧТО ЭКЗЕМПЛЯРЫ НЕ ИМЕЮТ ИСКЛЮЧЕНИЕ ТОЛЬКО ДЛЯ БЕЗОПАСНОСТИ.
Теперь перейдем к консоли Spring Eureka.
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