Jestem nowy w rozwijaniu mikrousług, chociaż od jakiegoś czasu badam ten temat, czytając zarówno dokumentację Springa, jak i Netflix.
Rozpocząłem prosty projekt dostępny na Github . Zasadniczo jest to serwer Eureka (Archimedes) i trzy mikrousługi klienta Eureka (jeden publiczny interfejs API i dwa prywatne). Sprawdź plik readme github, aby uzyskać szczegółowy opis.
Chodzi o to, że gdy wszystko działa, chciałbym, aby w przypadku zabicia jednej z prywatnych mikrousług serwer Eureka zdał sobie z tego sprawę i usunął go z rejestru.
I znaleźć na to pytanie na Stackoverflow i roztwór przepływa przez zastosowanie enableSelfPreservation:false
w config Eureka Server. Robiąc to po chwili, zabita usługa znika zgodnie z oczekiwaniami.
Jednak widzę następujący komunikat:
TRYB SAMOOCHRONY JEST WYŁĄCZONY, TO MOŻE NIE ZABEZPIECZYĆ WYGASANIA INSTANCJI W PRZYPADKU SIECI / INNYCH PROBLEMÓW.
1. Jaki jest cel samozachowawczości? W doc stwierdza, że przy zachowaniu własnej sprawie „klienci mogą uzyskać instancje, które już nie istnieją” . Kiedy więc warto go włączać / wyłączać?
Ponadto, gdy autoochrona jest włączona, możesz otrzymać zaległą wiadomość w ostrzeżeniu konsoli Eureka Server:
NAGŁY WYPADEK! EUREKA MOŻE NIEPRAWIDŁOWO ZGŁOSIĆ SIĘ W PRZYPADKU WYSTĄPIENIA, JEŚLI NIE. ODNOWIENIA SĄ MNIEJSZE NIŻ PRÓG I PONIEWAŻ INSTANCJE NIE WYGASNĄ, TYLKO BY BYĆ BEZPIECZNE.
Teraz przejdźmy do konsoli Spring Eureka.
Lease expiration enabled true/false
Renews threshold 5
Renews (last min) 4
Natknąłem się na dziwne zachowanie liczby progów: kiedy uruchamiam sam serwer Eureka, próg wynosi 1.
2. Mam jeden serwer Eureka i skonfigurowałem go tak, registerWithEureka: false
aby uniemożliwić mu rejestrację na innym serwerze. Więc dlaczego pojawia się w liczbie progowej?
3. Dla każdego klienta rozpoczynam licznik progów rośnie o +2. Wydaje mi się, że to dlatego, że wysyłają 2 wiadomości odnowienia na minutę, prawda?
4. Serwer Eureka nigdy nie wysyła odnowienia, więc ostatnia minuta odnowienia jest zawsze poniżej progu. Czy to normalne?
renew threshold 5
rewnews last min: (client1) +2 + (client2) +2 -> 4
Cfg serwera:
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
Klient 1 cfg:
spring:
application:
name: random-image-microservice
server:
port: 9999
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
healthcheck:
enabled: true