Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Der Spring Cloud Netflix Stack Grundkurs

Einen Zuul-Proxy aufsetzen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Nichts ist schlimmer für eine cloud-fähige Anwendung, als wenn Servernamen und Ports fest verdrahtet sind. Um diesem Problem zu begegnen, werden Sie in diesem Video einen Zuul-Proxy aufsetzen und die Frontend-Anwendung so anpassen, dass diese keine fest verdrahteten Serverinformationen mehr aufweist.

Transkript

Lieben Sie auch fest verdrahtete Adressen? Idealerweise mit Servername, Port und vielleicht sogar noch einem Protokoll vorne dran? Das Ganze ist einer der Kardinalfehler, den man machen kann, wenn man in das Cloudumfeld einsteigt, denn hier können sich Adressen jederzeit ändern. In diesem Video werden wir uns deshalb der Thematik Routing einmal widmen, und klären, wo genau der Kardinalfehler liegt, und wie wir ihn vermeiden können. Generell bestehen Applikationen im Microservice-Umfeld in aller Regel aus mehr als einem Microservice. Und das bedeutet dann, dass die Microservices miteinander kommunizieren. Diese Adressen, über die die Microservices miteinander kommunizieren, sollten idealerweise nur intern bekannt sein, denn wenn ich die Adresse nach draußen gebe, also an den Client gebe, dann gebe ich zum einen Interna der Applikation preis, und zum anderen kann ich das nachträglich nicht mehr wirklich ändern. Aus diesem Grund setzen wir häufig Frontend-Server oder Proxy-Server ein, die das Routing erledigen. Im Spring Cloud Netflix-Umfeld ist dies der Zuul. Der Zuul erlaubt es uns, Routen statisch oder dynamisch zu hinterlegen, und diese Routen sind letztlich die Sachen, die nach außen sichtbar sind, also die Kommunikationspfade, die die Applikation nach draußen preisgibt. Intern können natürlich deutlich mehr Services auf eine ganz andere Art und Weise interagieren. Das Prinzip besteht da drin, dass der Client eine bestimmte Route anfordert, also eine bestimmte Adresse innerhalb der Applikation anfordert, in diesem Fall "/frontend", und der Zuul nachschaut, und dann den Pfad "/frontend" als Aufruf an einen Service mit einer spezifischen Adresse gegebenenfalls einem spezifischen Port übersetzt. Wenn der Nutzer nun eine andere Adresse aufruft, also "/backend" beispielsweise, dann wendet er sich an denselben Server, aber der Server ruft dann seinerseits möglicherweise einen anderen Service auf einer anderen Adresse auf. Das ganze ist hochdynamisch, es kann sogar geändert und angepasst werden, ohne dass wir die Applikation neu starten müssen. In unserem einfachen Fall, dem wir uns jetzt widmen, müssen wir schon im Zweifelsfall den Zuul-Server neu starten, aber Sie werden sehen, das Ganze ist sehr, sehr einfach umzusetzen, und mit wenig Aufwand zu implementieren. Betrachten Sie einmal diese Adresse. Diese Adresse ist für eine cloud-basierende Applikation ein komplettes No-Go, fast schon ein Todesurteil, um das mal so drastisch auszudrücken, denn sie beinhaltet Servername und Port. Was ist falsch an Servername und Port, werden Sie sich fragen? Bei einer cloudbasierenden Applikation ist es so, dass sich diese Daten, sowohl Servername als auch Port, eigentlich jederzeit und ohne Vorwarnung ändern können, nämlich dann, wenn eine zusätzliche Serviceinstanz gestartet wird, oder wenn eine existierende Serviceinstanz plötzlich herunterfährt. Dann wäre es ganz, ganz schlimm, wenn wir das festverdrahtet drin hätten. Wir müssen also "localhost:8080" loswerden, idealerweise auch gleich noch das Protokoll vorne weg, und das schaffen wir, indem wir unserem Projekt ein weiteres Projekt hinzufügen. Wir machen einen Rechtsklick in dem "Project Explorer", wählen aus dem Kontextmenü "New Project" aus, und wählen dann hier aus dem Spring-Bereich "Spring Starter Project" aus. In dem sich öffnenden Wizard können wir jetzt die entsprechenden Daten festlegen, zum einen den Namen "guestbook-proxy", zum anderen die Group-ID, Artefakt-ID, die Beschreibung und die Package-Namen. Sobald wir das erledigt haben, klicken wir auf "Next", und können jetzt hier die Zuul-Dependency auswählen. Ich gebe oben "Zuul" ein und setze dann das Häkchen bei Zuul, und klicke dann auf "Finish". Nach ein paar Sekunden, beim ersten Aufruf auch nach ein paar Minuten, wird das Projekt angelegt sein, und wir können es zu einem Zuul-Proxy-Projekt umbauen. Um dies zu erledigen, öffnen wir zunächst einmal die automatisch angelegte Bootstrap-Datei "GuestbookProxyApplication.java" und fügen hier eine weitere Annotation hinzu, nämlich "EnableZuulProxy". Das Ganze lassen Sie dann per "Steuerung"+"Space" automatisch importieren, das kann auch ein paar Sekunden dauern, eventuell gibt es auch einen Eclipse-Fehler, wie in meinem Fall. Ist aber kein Problem, einfach speichern, und dann ist es als Import ordnungsgemäß hinzugefügt worden. Nun wechseln wir in den Bereich "src/main/resources", und hier befindet sich eine Datei namens "application.properties". Diese Datei benennen wir per Rechtsklick um, in "application.yml". Wir verwenden jetzt diese "yml"-Datei um auf deren Ebene zum einen zu sagen, dass der Server, den wir jetzt hier gerade schreiben, auf den Port 8000 lauschen soll, das machen wir über "server.port", das wird übersetzt, sobald wir "Enter" drücken, in "server:" nächste Zeile, "port:" und da tragen wir jetzt den gewünschten Port ein, also 8000, und jetzt können wir die Zuul-Routen hinzufügen, indem wir "Zuul.roots" eingeben, "Enter" drücken, und dann wird das entsprechend umgeändert, und jede Route ist zum einen benannt, das heißt, sie bekommt einen eindeutigen Namen, in diesem Fall "backend", und sie verfügt über zwei Attribute, das eine Attribut ist "path", das ist der Pfad innerhalb der Applikation, der aufgerufen wird, in diesem Fall "/guestbook/**", die beiden Sterne am Ende sind wichtig, die bedeuten nämlich, auch untergeordnete Pfade werden entsprechend so übersetzt, und das zweite Attribut ist "url", und das ist die Adresse, des eigentlichen, im Hintergrund laufenden Servers. Hier können wir jetzt durchaus festverdrahtet, "localhost:8080/guestbook" eingeben, das ist dann kein Problem, das sieht nämlich der Client nicht. Die zweite Route, die wir hinzufügen, ist "frontend". Der Pfad ist hier" /**", also alles, was direkt unter "/" liegt, und das wird vermutet unter "http://localhost:8081/", und das ist der "frontend"-Server. So, und damit ist der Zuul-Proxy schon komplett fertig, mehr müssen wir hier nicht machen, wir müssen den lediglich noch starten. Bevor wir das tun, wechseln wir allerdings in die JavaScript-Dateien des "frontend"-Projektes, und entfernen hier die festen Verdrahtungen auf Protokoll, Servername und Port, sodass dort nur noch "guestbook" steht. Das machen wir bei beiden Vorkommen, das Ganze speichern wir, und jetzt können wir die Einzelprojekte starten. Wir machen das per Rechtsklick, "run as Spring Boot App", das dauert dann ein paar Sekunden, bis die Applikation zur Verfügung steht, dasselbe machen wir für das Backend, "run as Spring Boot App", und sobald beide, Frontend wie auch Backend zur Verfügung stehen, können wir den Proxy-Server starten, Rechtsklick, "run as Spring Boot App" startet dann auch den Proxy-Server. Nun müssen wir lediglich noch den Browser öffnen, und auf die neue Adresse, "http://localhost:8000" verweisen. Ich gebe das also im Browser meines Vertrauens ein, und sobald ich das erledigt habe, erscheint das Gästebuch, und die Funktionalität ist gegeben, ich klicke auf "Neuen Eintrag hinzufügen", gebe ein paar Werte ein, und klicke dann auf "Speichern". Speichern war erfolgreich, und ich gehe auf die Startseite, und sehe auch den Eintrag. Aus Sicht des Browsers, und damit des Benutzers, verhält sich die Applikation natürlich genauso wie vorher, mit einem ganz gewaltigen Unterschied. Es gibt nur noch diesen einen Server mit dem einen Port, aus seiner Sicht, nämlich "localhost" mit dem Port 8000, den er kennen muss. Dass intern die Kommunikation dann auf zwei weitere Server geroutet wird, die auf Port 8080 und 8081 lauschen, das sieht der Browser nicht mehr, weil das Ganze geschieht verborgen durch den Zuul-Proxy serverseitig. Aus Sicht des Clients des Browsers ist es nun eine Applikation, die auf einen Port lauscht, und die also somit sich monolithisch im positiven Sinne darstellt. Und das Ganze haben wir erreicht, indem wir unsere Applikation in Zuul-Prozy hinzugefügt haben, die beiden Routen auf "frontend" und "backend" konfiguriert haben, die "Enable Zuul-Proxy-Annotation" dann der "Bootstrapping"-Klasse mit hinzugefügt haben, und dann die festen Verdrahtungen auf Servername und Port in der Client und der Frontend- JavaScript-Applikation entfernt haben. Das Ganze war wenig Aufwand, und der Effekt ist gewaltig.

Der Spring Cloud Netflix Stack Grundkurs

Lernen Sie den Open Source Cloud Stack und seine vielfältigen Einsatzmöglichkeiten kennen.

2 Std. 5 min (13 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Exklusiv für Abo-Kunden
Erscheinungsdatum:06.03.2017

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!