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

Mit Hystrix einen sicheren Mail-Versand gewährleisten

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Aus Nutzersicht sind sehr lange laufende und damit blockierende Aufrufe unerwünscht. Immerhin können während dieser Zeit keine anderen Aufrufe durchgeführt oder verarbeitet werden. Lassen Sie sich daher von Karsten Samaschke erklären, wie sich durch den Einsatz von Hystrix der Mail-Versand asynchron und sicher durchführen lässt.

Transkript

Aus Usability-Sicht gibt es kaum etwas Schlimmeres als Operationen, die länger dauern und das Frontend bzw. die aufgerufene Komponente blockieren. Ein Beispiel dafür könnte z.B. der Versand einer E-Mail sein. In unserer Applikation haben wir genau so eine Operation implementiert, indem das Backend den E-Mail-Service anspricht, um die E-Mail zu versenden, und so lange wie der E-Mail-Service die Nachricht nicht versandt hat, blockiert das Backend und damit auch das Frontend, das der Benutzer bedient. Wir werden uns in diesem Video deshalb anschauen, wie wir diese blockierende Operation so umschreiben können, dass sie asynchron erfolgt und damit nicht mehr blockiert. Wir verwenden dafür Hystrix als Framework. Die Asynchronität erreichen wir, indem wir zunächst einmal dem Backend-Projekt in dessen Konfigurationsdatei "pom.xml" eine weitere Dependency --also Abhängigkeit-- hinzufügen. Wir öffnen zu diesem Zweck die Datei und klicken auf "Add", geben als Group-ID "org.springframework.cloud" an und die Artefakt-ID, also die Komponente, die wir hinzufügen wollen, ist "spring-cloud-starter-hystrix". Die Version ist "1.2.3.RELEASE". Ein Klick auf "OK" übernimmt die Änderung, nachdem wir die Datei speichern, wird die Komponente im Hintergrund heruntergeladen. Nun können wir die Bootstrapping-Klasse öffnen; diese nennt sich "GuestbookBackendApplication" und hier fügen wir eine weitere Annotation hinzu, nämlich "EnableCircuitBreaker". Damit aktivieren wir Hystrix und können die Funktionalitäten von Hystrix entsprechend nutzen. Der nächste Schritt besteht nun darin, ein Service zu schreiben, der für den Aufruf des Mail-Microservices zuständig ist. Innerhalb dieses Services passiert dann die ganze Magie, deswegen legen wir zunächst einmal eine neue Klasse an und nennen diese Klasse "GuestbookMailService". Wir annotieren die Klasse mit der Service-Annotation und lassen uns den "GuestbookMailClient", also die Feign-Komponente, die für den Versand zuständig ist, injizieren. Zu diesem Zweck legen wir eine entsprechende Member-Variable an und annotieren diese mit der "@Autowired"-Annotation. Der eigentliche Versand soll asynchron erfolgen, dies drücken wir in Java aus, indem wir eine Methode anlegen, die den Typ "Future" hat. Wir legen also eine Methode vom entsprechenden Typ an und der Future-Typ, der zurückgegeben wird, ist Boolean und die Methode nennt sich "SendMail" und nimmt als Parameter eine "GuestbookEntry"-Instanz entgegen, nämlich der Gästebucheintrag, der zuvor angelegt worden ist. Nun lassen wir in dieser Methode eine neue "AsyncResult"-Instanz erzeugen und wir achten darauf, dass wir die "AsyncResult"-Instanz von Netflix benutzen. Innerhalb dieser Instanz implementieren wir die Methode "invoke" und diese Methode ist dafür verantwortlich, dass der eigentliche Versand stattfindet, das heißt, hier drin rufen wir dann auf Ebene des Feign-Klients dessen Methode "SendMail" auf. und nehmen damit den Versand vor. Nach dem erfolgreichen Versand geben wir "true" als Rückgabe zurück. Um das Ganze für uns ein wenig zu visualisieren, werden wir in der Standardausgabe entsprechende Hinweise hinterlegen; einmal bevor wir die Nachricht versenden und einmal nachdem wir sie versandt haben. Diese Methode annotieren wir nun mit der "HystrixCommand"-Annotation und damit ist gleichzeitig der "CircuitBreaker" aktiv. "CircuitBreaker" bedeutet, wenn ein Fehler auftritt, dann können wir ein geregeltes Verhalten an den Tag legen, um diesen Fehler zu behandeln. Zu diesem Zweck geben wir hier mithilfe der "FallbackMethod"-Annotation bzw. mithilfe des entsprechenden Attributes eine zweite Methode an, die von Hystrix aufgerufen werden soll, wenn der Versand nicht erfolgreich war. Diese Methode müssen wir nun noch bereitstellen und implementieren. Das ist eine private Methode, vom Rückgabetyp "Boolean", die muss nicht "Future of Boolean" sein, die nennen wir "DefaultMail", die bekommt dieselbe "GuestbookEntry"-Instanz als Parameter übergeben. Und hier könnten wir jetzt eine spezifische Verarbeitung vornehmen, wir beschränken uns aber darauf, hier einfach zu sagen, dass das Ganze nicht erfolgreich war. Rückgabe dieser Methode ist dann "false". Damit haben wir das Versenden bzw. das Aufrufen der E-Mail-Komponente gekapselt, in einem eigenständigen Command und dieses Command kann asynchron ausgeführt werden. Dadurch dass es ein "HystrixCommand" ist, werden zum einen Informationen über das Laufverhalten erhoben und dann interessierten Komponenten zur Verfügung gestellt, und zum anderen haben wir eine automatische Fallback-Möglichkeit, wenn das Ganze nicht funktioniert. Nun müssen wir lediglich noch in den Controller gehen und dort den bisherigen Aufruf ersetzen, sodass unser Guestbook-Mail-Service zukünftigt verwendet wird. Wir öffnen also den Controller und entfernen hier zunächst einmal die private Member-Variable "MailClient" und fügen an ihrer Stelle einen Verweis auf den Mail-Service, den wir gerade eben geschrieben haben, ein. Und beim eigentlichen Versand werden wir nun den Service aufrufen, weitere Änderungen sind hier nicht notwendig. Wir fügen vielleicht noch eine Debug-Ausgabe ein, um für uns zu dokumentieren, dass das Ganze hier aufgerufen worden ist und haben nun die Implementierung komplett abgeschlossen. Nun können wir die Applikation neu starten und können uns einmal das Laufverhalten anschauen. Wir beenden also alle laufenden Backend-Instanzen und starten diese neu; per Rechtsklick, "Run as Spring Boot App". Selbstverständlich funktioniert das Ganze auch mit zwei oder mehr laufenden Instanzen. Nachdem die Instanzen gestartet sind, können wir in das Frontend des Gästebuchs wechseln und dort einen neuen Eintrag anlegen. Wir klicken also auf die entsprechende Schaltfläche, vergeben einen Titel, geben eine entsprechende Nachricht an und geben unseren Namen ein und klicken dann auf "Speichern". Der Eintrag wird sofort als gespeichert markiert, wir können sofort zur Startseite zurückkehren, und nach einigen Sekunden sollten wir in unserem E-Mail-Postfach die entsprechende Nachricht vorfinden können. Hier in Eclipse suchen wir zunächst einmal die Konsole des Services, der die eigentliche Verarbeitung vorgenommen hat und können dann auf Ebene dieses Services nach unseren Log-Ausgabe suchen, ich habe sie hier schon einmal gefunden, man sieht, wenn man sich diese Ausgaben anschaut, dass zunächst einmal die beiden Ausgaben aus der Methode "Create" erscheinen, bevor die erste Ausgabe der Methode "SendMail" auftaucht. Etwas weiter unten und wenn man sich das anschaut, etwa eineinhalb Sekunden später, kommt dann auch die letzte Ausgabe, die Auskunft darüber gibt, dass der Mail-Service erfolgreich aufgerufen worden ist; diese hat dann seinerseits die E-Mail versandt. Wir haben uns in diesem Video einmal angeschaut, wie wir eine langlaufende Operation asynchron gestalten können. Zu diesem Zweck haben wir das Hystrix-Framework in unserer Backend-Applikation integriert und haben den Versand in eine eigene Serviceklasse, die entsprechende asynchrone Funktionalitäten bereitstellt, ausgelagert. Damit haben wir aus Nutzersicht einen großen Mehrwert geschaffen, denn die Applikation blockiert nicht mehr und ist nunmehr wesentlich angenehmer zu verwenden.

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!