Ich bin neu in der Entwicklung von Microservices, obwohl ich seit einiger Zeit darüber recherchiere und sowohl die Dokumentation von Spring als auch die von Netflix gelesen habe. Ich habe ein einfaches Projekt available on Github gestartet. Es ist im Grunde ein Eureka Server (Archimedes) und drei Eureka Client Microservices (eine öffentliche API und zwei private). Eine ausführliche Beschreibung finden Sie in der Readme-Datei von Github.Spring Cloud verstehen Eureka Server Selbstschutz und Erneuerungsschwellenwert
Der Punkt ist, dass, wenn alles läuft, ich möchte, dass, wenn einer der privaten Microservices getötet wird, der Eureka Server realisiert und entfernt es aus der Registrierung.
I found this question on Stackoverflow, und die Lösung übergibt enableSelfPreservation:false
in der Eureka Server-Konfiguration. Nach einer Weile verschwindet der getötete Dienst wie erwartet.
Allerdings kann ich die folgende Meldung:
DIE MODE Selbsterhaltung gedreht off.This NICHT INSTANZ ABLAUF BEI NETZ/ANDERE PROBLEME SCHÜTZEN.
1. Was ist der Zweck der Selbsterhaltung? Die doc besagt, dass mit Selbsterhaltung auf "Clients die Instanzen abrufen können, die nicht mehr vorhanden sind". Wann ist es ratsam, es ein-/auszuschalten?
Wenn darüber hinaus Selbsterhaltung eingeschaltet ist, können Sie eine hervorragende Nachricht in der Server-Konsole Warnung Eureka erhalten:
NOT! EUREKA KANN UNBEFUGT WERDEN, WENN SIE NICHT BEWORFEN WERDEN. ERNEUERUNGEN SIND NIEDRIGER ALS SCHWELLE UND DAMIT DIE INSTANZEN SIND NICHT NUR ABGELAUFEN, SICHER ZU SEIN.
Jetzt geht es weiter mit der Spring Eureka Console.
Lease expiration enabled true/false
Renews threshold 5
Renews (last min) 4
Ich habe über eine seltsame Verhalten der Schwellenzahl kommen: wenn ich die Eureka Server allein zu starten, ist die Schwelle 1.
2. ich einen einzelnen Eureka-Server und ist so konfiguriert, mit registerWithEureka: false
um zu verhindern, dass es sich auf einem anderen Server registriert. Warum erscheint es dann in der Schwellenzählung?
3. Für jeden Client, den ich beginne, wird der Schwellenwert um +2 erhöht. Ich schätze, weil sie 2 Nachrichten pro Minute senden, habe ich recht?
4. Der Eureka-Server sendet niemals eine Erneuerung, so dass die letzten min Erneuerungen 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
Ich möchte Zeit nehmen, um diese Frage zu beantworten. Es ist kompliziert. Einige der Antworten sind in Netflix-Code und andere sind Konfiguration. Ich möchte, dass meine Antwort als Teil der Spring Cloud-Dokumentation endet, aber es wird wahrscheinlich nach Thanksgiving sein, wenn meine Kollegen nicht vorher antworten. – spencergibb
Dies ist ein kleiner Hintergrund von Netflix: https://github.com/Netflix/eureka/wiki/Understanding-Eureka-Peer-to-Peer-Communication – spencergibb
Hier ist ein paar Hintergrund: https://github.com/spring- Cloud/Spring-Cloud-Netflix/Probleme/373 – spencergibb