Ich bin neu in der Entwicklung von Microservices, obwohl ich eine Weile darüber recherchiert habe und sowohl die Dokumente von Spring als auch die von Netflix gelesen habe.
Ich habe ein einfaches Projekt gestartet, das auf Github verfügbar ist . Es handelt sich im Grunde genommen um einen Eureka-Server (Archimedes) und drei Eureka-Client-Microservices (eine öffentliche API und zwei private). Eine detaillierte Beschreibung finden Sie in der Readme-Datei von github.
Der Punkt ist, dass wenn alles läuft, ich möchte, dass wenn einer der privaten Microservices getötet wird, der Eureka-Server ihn erkennt und aus der Registrierung entfernt.
Ich habe diese Frage bei Stackoverflow gefunden und die Lösung wird enableSelfPreservation:false
in der Eureka Server-Konfiguration verwendet. Wenn Sie dies nach einer Weile tun, verschwindet der getötete Dienst wie erwartet.
Ich kann jedoch die folgende Meldung sehen:
DER SELBSTERHALTUNGSMODUS WIRD AUSGESCHALTET. DIESES KANN IM FALL VON NETZWERKEN / ANDEREN PROBLEMEN KEINEN SOFORT-SCHUTZ SCHÜTZEN.
1. Was ist der Zweck der Selbsterhaltung? Das Dokument gibt an, dass mit Selbsterhaltung auf "Clients die Instanzen erhalten können, die nicht mehr existieren" . Wann ist es also ratsam, es ein- und auszuschalten?
Wenn die Selbsterhaltung aktiviert ist, wird in der Eureka Server-Konsolenwarnung möglicherweise eine ausstehende Meldung angezeigt:
NOTFALL! EUREKA KANN FALSCH ANFORDERN, DASS INSTANZEN VORHANDEN SIND, WENN SIE NICHT SIND. VERLÄNGERUNGEN SIND WENIGER ALS SCHWELLE UND DAHER LÄUFEN DIE INSTANZEN NICHT AB, UM SICHER ZU SEIN.
Nun geht es weiter mit der Spring Eureka Console.
Lease expiration enabled true/false
Renews threshold 5
Renews (last min) 4
Ich bin auf ein seltsames Verhalten der Schwellenwertanzahl gestoßen: Wenn ich den Eureka-Server alleine starte, ist der Schwellenwert 1.
2. Ich habe einen einzelnen Eureka-Server und bin so konfiguriert registerWithEureka: false
, dass er sich nicht auf einem anderen Server registriert. Warum wird es dann in der Schwellenwertanzahl angezeigt?
3. Für jeden Client, den ich starte, erhöht sich der Schwellenwert um +2. Ich denke, das liegt daran, dass sie 2 Erneuerungsnachrichten pro Minute senden. Stimmt das?
4. Der Eureka-Server sendet niemals eine Verlängerung, sodass die letzten Minuten der Erneuerung immer unter dem Schwellenwert liegen. Ist das normal?
renew threshold 5
rewnews last min: (client1) +2 + (client2) +2 -> 4
Server 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
Client 1 cfg:
spring:
application:
name: random-image-microservice
server:
port: 9999
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
healthcheck:
enabled: true