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