Ich habe derzeit ein Problem bei der Verwendung von Netflix Eureka und Zuul in einer Spring Cloud-Umgebung mit Docker.Spring Cloud mit Zuul und Eureka kann nicht mit Service-Instanzen umgehen
Meine aktuelle Setup ist wie folgt: 3 Docker-Container:
- ein Eureka-Server
- ein Zuul-Server, der Eureka verwendet Routen zu Dienstleistungen und Last zur Karte zwischen mehreren Behältern des gleichen Service balanciert.
- ein Dienst (zur Zeit nur einen einfachen String zurückkehr)
Dieses Setup funktioniert gut, aber Probleme beginnen, wenn ich mit der Skalierung des Dienstes zu spielen beginnen. Wenn ich hochskaliere, nimmt Zuul die neuen Server nach 30 Sekunden auf. Das ist okay für mich. Wenn ich Dienstcontainer abnehme, können Aufrufe an Zuul jedoch fehlschlagen (mit einem HTTP-Fehlercode 200!), Weil Zuul immer noch denkt, dass sich die Server im aktiven Pool befinden.
ich mit Spring-Boot 1.3.6 und Spring Wolke 1.1.2
Meine Fragen:
- Kann Anrufe konfiguriert werden ZUUL erneut zu versuchen?
- Gibt es eine Möglichkeit, Zuul zu zwingen, mit einem REST-Aufruf einen Ping an alle Server zu senden? Soweit ich sehen kann, gibt es dafür keinen Spring Cloud-Endpunkt. Posting to/routes macht nicht was ich will.
- Wenn das nicht möglich ist, kann Zuul konfiguriert werden, um tatsächlich etwas anderes als eine 200 zu senden, wenn ein Server nicht rechtzeitig antwortet?
paar Fragen ... Was Sie genau das tun, bedeuten Aufrufe nach Zuul mit einem Fehlercode 200? Können Sie eine Beispielantwort geben? Auch wenn Sie Instanzen nach oben/unten bringen, wird Zuul (oder andere Eureka-Clients) eine Weile brauchen, da die Clients Daten vom Eureka-Server aktualisieren müssen. Erkennt Zuul schließlich, dass die Instanzen nicht mehr aktiv sind, nachdem die Daten von Eureka aktualisiert wurden? –
Wenn ich Container abnehme, geben Aufrufe von Zuul, die an den Server weitergeleitet werden und nun nicht erreichbar sind, eine leere Seite mit dem HTTP-Antwortcode 200 zurück.Es gibt also keine Möglichkeit für den Client zu wissen, dass er es möglicherweise erneut versuchen muss. Ich hätte eine 504 oder 503 erwartet. Zuul findet tatsächlich nach dem Ping-Intervall (das ist 30 Sekunden) heraus, dass bestimmte Server nicht mehr verfügbar sind und entfernt sie aus der LB. Aber während dieser 30 Sekunden geben Aufrufe leere Seiten zurück, was keinen Sinn ergibt. –
Nebenbei bemerkt, Eureka ist sich bewusst, wenn ein Server aus der Registrierung entfernt wird, also frage ich mich, ob es eine Möglichkeit gibt, dieses Ereignis an Zuul anzuhängen, damit Zuul, wenn ein Server nicht registriert wird, ein Signal erhält, dass es aktualisiert werden muss seine Serverliste. Es ist nicht wirklich ein Problem, wenn neue Server nicht sofort in der LB verfügbar sind, aber es ist ein Problem, wenn Sie die zugrunde liegenden Dienste herunterskalieren und es 30 Sekunden dauert, bis der LB aufholt, besonders wenn es ein System gibt, das davon Kenntnis hat (Eureka). –