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