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

Eine erste Service-Discovery-Lösung mit Eureka entwickeln

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Setzen Sie in diesem Video mit Hilfe von Eureka eine Service-Discovery-Lösung für die Gästebuch-Anwendung auf. Lassen Sie sich dazu zunächst erklären, was genau unter Service Discovery zu verstehen ist und wie Sie Eureka in die Beispielanwendung integrieren können.

Transkript

Eine ganz wesentliche und grundlegende Anforderung an eine moderne, Cloud-fähige Applikation ist, dass die feste Verdrahtung von Adressen von Komponenten, mit denen wir arbeiten wollen, entfällt, denn diese Komponenten bzw. deren Adressen können sich jederzeit ändern. Aus diesem Grund gibt es das Konzept der Service Discovery und wir werden in diesem Video einmal klären, was die Service Discovery eigentlich ist, wie sie funktioniert und wie wir sie in unsere Applikation integrieren können. Service Discovery ist der zentrale Dienst in einer Microservice-Architektur. Das ist nicht übertrieben, denn die Service Discovery weiß als einzige Komponente über alle anderen Komponenten Bescheid. Jeder Dienst, der in unserer Applikation mit Daten liefern möchte, Daten verarbeiten möchte oder überhaupt interagieren möchte, meldet sich nämlich bei der Service Discovery an und jede Instanz eines Dienstes ist dort bekannt. Die Service Discovery wird dann von Clients genutzt, die mit anderen Komponenten interagieren wollen. Das bedeutet, der Client wird, bevor er überhaupt mit einer Komponente arbeitet, erst einmal bei der Service Discovery anfragen, ob eine bestimmte Komponente eines bestimmten Typs verfügbar ist und wo er sie finden kann. Damit entfällt die Notwendigkeit für die feste Verdrahtung von Adressen und wir können die Ausfallsicherheit gewährleisten, denn sobald eine Instanz eines Dienstes wegfällt, wird dies in der Service Discovery bemerkt und vermerkt. Und Clients, die mit der Applikation interagieren wollen, werden dann ihrerseits andere Komponentenadressen von der Service Discovery zurückgeliefert bekommen. Ebenfalls können wir auf die Art und Weise die Skalierbarkeit gewährleisten, denn wenn wir zusätzliche Instanzen von Diensten starten, dann werden die bei der Service Discovery registriert und können dann von bspw. dem Ribbon-Framework, was ja für das Load Balancing zuständig ist, genutzt werden und angesprochen werden. Auf Ebene von Spring Cloud Netflix verwenden wir das Eureka-Framework, um eine Service Discovery aufzusetzen und auch um die clientseitige Sicht der Service Discovery abzubilden. Wie funktioniert das Ganze? Prinzipiell ist es so, dass eine Eureka-Instanz innerhalb der Applikation gestartet wird und zur Verfügung gestellt wird. Ein Service, der in der Applikation nun genutzt werden möchte, meldet sich bei Eureka an, d. h., er registriert sich in der Service Discovery. Ein anderer Service, der mit dem Service A interagieren möchte, geht nicht etwa direkt auf diesen Service A, sondern fragt bei Eureka nach, welche Instanzen vom Service A überhaupt zur Verfügung stehen. Diese Antwort, die Informationen, nutzt er dann, um auf diesen Service zuzugreifen. Die Service Discovery stellt also immer die zentrale Komponente in einer Microservice-basierenden Applikation dar. Gleichzeitig ist Eureka ein Framework, was uns erlaubt, auch die Service Discovery zu clustern, d. h. mehrere Instanzen davon vorzuhalten, die sich miteinander synchronisieren, sodass wir an dieser Stelle keinen Single Point of Failure haben. Sehen wir uns nun einmal an, wie wir eine Eureka-Instanz innerhalb unserer Applikation aufsetzen können. Ein Eureka-Server wird üblicherweise in Form eines Microservices bereitgestellt. Wir werden in unserem Projekt Explorer deshalb nun per "New" und "Project" ein neues Spring Starter Project anlegen. Und nachdem wir die Basisdaten für Name, Group-Id, Artifact-Id, Beschreibung und Package-Name festgelegt haben und auf "Next" klicken, können wir nach "Eureka" suchen. Wir wählen dann aus der Ergebnisliste den Eintrag "Eureka Server" aus und klicken auf "Finish". Das Projekt wird nun automatisch angelegt als eine Spring Boot-Applikation mit den benötigten Dependencies. Und nachdem dies geschehen ist, wechseln wir in die Bootstrapping-Klasse "GuestbookDiscoveryApplication.java" und fügen hier eine Annotation hinzu, nämlich "EnableEurekaServer". Drücken Sie am Ende "Strg+Space", um den Import generieren zu lassen. Eventuell gibt es wie in meinem Fall jetzt hier eine entsprechende Fehlermeldung. Sobald aber der Import entsprechend angelegt ist, ist alles so weit in Ordnung. Mehr müssen wir hier im Java-Code nicht machen, um Eureka ans Laufen zu bekommen. Wir wechseln nun in den Bereich "Source" "Main Resources". Und hier finden wir die Datei "application.properties". Diese Datei benennen wir zunächst einmal per Rechtsklick und der Option "Rename" um, und zwar in "application.yml", "yml" wird als Y-M-L geschrieben, und öffnen die Datei. Nun fügen wir zunächst einmal den Serverport hinzu. Dieser Serverport wird ausgeführt als "${server_port:8761}". Was wir damit ausdrücken, ist, dass er entweder den Wert "8761" hat, das ist der Standardwert, oder aber, dass er den Wert aus dem Startparameter oder der Umgebungsvariable "server_port" bezieht. Auf die Art und Weise bleiben wir flexibel, was den Start der Applikation anbelangt. Nun legen wir Eureka-Einstellungen fest, und zwar zunächst einmal "eureka.client.register-with-eureka". Diesen Wert setzen wir auf "false". Das mag jetzt etwas widersinnig klingen, denn ich sage ja hier, wenn ich das übersetze, dass sich die Applikation nicht mit Eureka registrieren soll. Das macht aber komplett Sinn, denn diese Applikation ist ja Eureka. Wenn sie sich also bei sich selber registrieren würde, wäre das bestenfalls widersinnig. Die zweite Option, die wir setzen, ist "fetch-registry". Und auch diese wird auf "false" gesetzt, denn dieser Server soll sich nicht den Inhalt der Registry von Eureka laden. Er verwaltet sie ja selbstständig. Jetzt können wir noch die Unteroption "server" "waitTimeInMsWhenSyncEmpty" auf den Wert 0 setzen. Das sorgt dann dafür, dass der Server nicht an irgendwelchen Stellen blockiert, wenn er die Daten abruft oder verwaltet. Das ist eine optionale Eigenschaft, die kennt Eclipse hier gar nicht. Und damit sind wir hier an dieser Stelle fertig und können nun die Applikation, nachdem wir alles gespeichert haben, einmal starten. Wir führen einen Rechtsklick auf das Projekt aus und wählen aus dem Kontext-Menü "Run As" "Spring Boot App". Und nach ein paar Sekunden ist Eureka dann auch gestartet und wir können die Adresse des Eureka-Servers einmal im Browser öffnen Geben Sie zu diesem Zweck die Adresse "http://localhost8761" ein, drücken Sie "Enter" und Sie werden eine Anzeige erhalten analog dieser Anzeige, die Sie hier sehen. Und das ist das Dashboard von Eureka. Das wirkt jetzt nicht sonderlich eindrucksvoll, aber wir sollten uns schon mal diesen Bereich hier merken: "Instances currently registered with Eureka", denn hier werden dann alle Services, die sich an Eureka anmelden, eingetragen werden. Um Eureka auf Ebene der Clients zu aktivieren, müssen wir den Projekten jeweils eine Abhängigkeit und eine Konfiguration hinzufügen sowie eine kleine Änderung an deren Bootstrapping-Klasse vornehmen. Wir machen dies beispielhaft am Frontend-Projekt. Wir öffnen zunächst einmal die "pom.xml"-Datei und wechseln hier in den Reiter "Dependencies". Per "Add" können wir nun eine neue Dependency hinzufügen. Die Dependency hat die Group-Id "org.springframework.cloud". Und die Artifact-Id ist "spring-cloud-starter-eureka" und die Version ist "1.2.3.RELEASE". Achten Sie hier darauf, dass sie das Wort "RELEASE" auch wirklich groß schreiben. Ein Klick auf "OK" fügt die Abhängigkeit hinzu. Wenn Sie die Datei speichern, wird Eclipse versuchen, die entsprechende Abhängigkeit aufzulösen. Nach ein paar Sekunden ist das dann erledigt. Nun können wir in die Bootstrapping-Klasse wechseln und fügen hier eine Annotation hinzu, nämlich "EnableEurekaClient". Wir lassen uns den entsprechenden Import generieren. Der Import ist: "org.springframework.cloud.netflix.eureka. EnableEurekaClient". Nachdem wir dies erledigt haben, können wir in die Ressourcen wechseln. Dort haben wir die Datei "application.properties". Und hier werden wir nun zunächst einmal unseren Service als solches bekanntmachen. Das machen wir, indem wir dem Service erst einmal einen Namen geben. Der Name des Services wird festgelegt über "spring.application.name". Und das ist der Name, über den dieser Service dann in Eureka identifiziert wird und auch von allen anderen Komponenten angesprochen werden kann. Nennen wir ihn einfach "frontend". Nun legen wir die Eureka-Client-Einstellungen fest. Das machen wir über "eureka.client.serviceurl.defaultzone" und der Wert, den wir hier angeben, ist: "http://localhost:8761/eureka/". Vergessen Sie das abschließende Slash nicht. Nun können wir analoge Konfigurationen auch beim Proxyprojekt vornehmen. Ich habe das schon mal vorbereitet. Habe also zunächst einmal in der "pom.xml" die entsprechende Dependency hinzugefügt, die Datei dann gespeichert im Bootstrapper, die "EnableDiscoveryClient"-Annotation hinzugefügt und die "application.yml"-Datei angepasst. Die hat ja ein etwas anderes Format als die "application.properties"-Datei, aber die Informationen sind genau dieselben. Ich habe also zunächst einmal den Applikationsnamen festgelegt, nämlich "proxy" und habe ebenfalls die Eureka-Informationen mit angegeben, wo befindet sich also Eureka. Analog bin ich dann beim Backend vorgegangen. Auch hier habe ich zunächst einmal in der "pom.xml" die entsprechende Dependency hinzugefügt, im Bootstrapper die Annotation hinzugefügt, "EnableEurekaClient", und in "application.properties" habe ich den Applikationsnamen mit festgelegt. Jetzt werde ich noch eine weitere Ergänzung vornehmen. Und zwar werde ich den Serverport hier festlegen. Und zwar mit dieser optionalen Notation, die wir vorhin schon einmal gesehen haben, lege ich Sie Ihnen auf die Umgebungsvariable "server_port" oder den Standardwert "8080" fest. Damit habe ich nun nämlich die Möglichkeit, mehrere Instanzen dieses Servers zu starten. Ich starte zunächst einmal aber jede Instanz einmal, indem ich per Rechtsklick "Run As" "Spring Boot App" die entsprechenden Applikationen ausführe. Nach ein paar Sekunden werden diese Applikationen dann geladen sein und wir können uns im Eureka anschauen, ob die Applikationen sich anmelden und wie das Ganze dann aussieht. Hier im Eureka aktualisiere ich nun die Seite. Und sobald das geschehen ist, sehe ich, dass wir tatsächlich drei Services definiert haben mit den Namen, die wir angegeben haben, "backend", "frontend" und "proxy" mit jeweils ihren Adressen samt Ports, über die sie erreichbar sind. Und die Services laufen, der Status ist "UP". Sie sehen, der Aufwand, um ein Eureka aufzusetzen und die Clients entsprechend mit Eureka in Beziehung zu setzen, ist eigentlich nicht sonderlich groß, speziell dann nicht, wenn er am Anfang einer Projektentwicklung vorgenommen wird. Was bringt uns das nun? Nun, es bringt uns zum einen erst einmal einen schönen Überblick über das, was gerade läuft, d. h., wir haben ein zentrales Dashboard, in dem wir sehen können, welche Services mit welchen Instanzen zur Verfügung stehen. Darüber hinaus bietet es uns als Ausblick für eine Erweiterung der Applikation natürlich jede Menge Möglichkeiten, denn das, was Eureka uns hier anzeigt, das kann dann auch von anderen Komponenten genutzt werden. Und die können auf diese Art und Weise, wie wir es ja schon besprochen haben, herausfinden, welche Instanzen tatsächlich laufen und müssen das Ganze nicht fest verdrahtet in sich selbst mitführen.

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!