Ein Microservice in 5 Minuten

22. Januar 2015Michael Schuboth

Der Architekturansatz der Microservices ist ein aktuelles Trendthema. Ausgehend von Martin Fowler und James Lewis, die diesen Ansatz geprägt haben, hat sich das Thema in den Fokus vieler Entwickler, Architekten und Unternehmen gespielt. Der Ansatz wird bereits von Unternehmen wie Netflix, Amazon und Otto in der Praxis verwendet.

Dabei hat mich besonders interessiert, wie ein einzelner Microservice entwickelt werden kann. Darum habe ich einen Microservice entwickelt, der beliebige Webseiten um eine Kommentarfunktion erweitert. Mit diesem Microservice können Anwender Kommentare erstellen. Diese werden direkt in einer dynamischen Übersicht angezeigt, durch welche eine Suche in den Kommentaren möglich ist. Bereits erstellte Kommentare können zudem bearbeitet oder gelöscht werden.

Einbindung_Microservice_in_adesso_Blog

Beispielhafte Einbindung des Microservices in den adesso Blog

 

Der Microservice kann über das HTML-Element <iframe> in eine beliebige Webseite eingebunden werden.

In diesem Artikel beschreibe ich, wie ich bei der Entwicklung vorgegangen bin. Der Artikel dient zum Einstieg in den Architekturansatz der Microservices sowie der Verdeutlichung, wie ein einzelner Microservice umgesetzt werden kann.

Los geht’s: Die Vorbereitungen

Die in der Galerie gezeigte Weboberfläche des Microservice wurde mithilfe von AngularJS und Bootstrap auf HTML-Seiten umgesetzt. Zur Sicherung der auf der Weboberfläche erstellten Kommentare wurde die dokumentenorientierte NoSQL-Datenbank MongoDB eingesetzt. Der Zugriff auf die Datenbank wurde über das Framework Spring Data MongoDB realisiert. Mithilfe von Spring MVC konnte eine REST-Schnittstelle für die Weboberfläche bereitgestellt werden. Das in der Weboberfläche verwendete AngularJS greift auf diese Schnittstelle zu und schließt damit die Verbindung von Weboberfläche bis zur Datenbank ab. Die Umsetzung als Microservice habe ich mithilfe von Spring Boot vorgenommen.

Grafik Sprin Bott

Mit Maven habe ich das Projekt organisiert. Die erforderlichen Abhängigkeiten zu Spring Boot, Spring MVC, Spring Data MongoDB sowie zu den Webtechnologien AngularJS und Bootstrap werden von Maven beschafft und verwaltet. Die beiden Webtechnologien sind dabei über Webjars eingebunden.

Weiter geht’s: Die Entwicklung

Gehen wir zuerst auf die MongoDB ein. Neben der Standardinstallation sind keine weiteren Konfigurationen notwendig, da der Zugriff auf die Datenbank mit Spring Data MongoDB erfolgt. Dazu wird ein Interface erstellt, welches das vom Framework stammende Interface MongoRepository erweitert.

Zur Laufzeit wird dieses Interface vom Spring Framework initialisiert und stellt eine Verbindung zur MongoDB bereit. Diese Verbindung wird dann von der mit Spring MVC erstellten REST Schnittstelle verwendet.

Die gezeigte Klasse CommentController stellt mit der Annotation @RestController eine REST-Schnittstelle zur Laufzeit bereit. In den Zeilen 20 und 21 wird auch das CommentRepository initialisiert. Auf dieses wird in den Methoden zurückgegriffen. Die Methode getComments gibt alle Kommentare zu einem bestimmten Artikel zurück, wo hingegen die Methode getComment einen einzigen Kommentar anhand der eindeutigen ID zurückgibt. Die Methode addComment nimmt mit der REST-Methode POST einen Kommentar entgegen, setzt zusätzlich das Datum der Erstellung und speichert es dann über das CommentRepository in der MongoDB. Schließlich wird die deleteComment-Methode dafür verwendet, einen einzelnen Kommentar aus der Datenbank zu löschen.

Das alles wäre ohne die Klasse Application nicht möglich. Diese Klasse wird von Spring Boot beim Start der Anwendung ausgeführt und schafft das Gerüst der Anwendung, indem z.B. das CommentRepository initialisiert und die Verbindung zur MongoDB bereitgestellt wird.

Spring Boot bindet beim Bau der Anwendung einen Web-Container mit in das JAR ein, sodass der gesamte Microservice in einem JAR ausgeliefert werden kann. In diesem JAR befinden sich ebenfalls die HTML-Seiten mit AngularJS und Bootstrap. Die index.html dient als Hauptseite, in welche AngularJS und Bootstrap eingebunden werden.

Über die AngularJS Direktive ng-view werden die weiteren Seiten innerhalb der index.html an dieser Stelle eingebunden. So auch die home.html, die Hauptseite des Microservice.

Die home.html ist in zwei Teilen organisiert. Das erste div umfasst dabei die Eingabefelder zur Erstellung und Bearbeitung der Kommentare. Das zweite div enthält die Anzeige der vorhandenen Kommentare in einer Tabelle sowie die Suchfunktion. Mit AngularJS Direktiven kann HTML-Elementen in AngularJS programmiertes Verhalten zugewiesen werden. Dazu zählen Methoden und auch Variablen, die in der app.js programmiert sind.

Der Controller CommentCtrl erhält zur Laufzeit die Werte dieser Variablen und steht dafür bereit die Funktionen, die den HTML-Elementen zugeordnet sind, auszuführen. Es gibt die Methode loadComments, welche über REST die Kommentare zu einem bestimmten Artikel zurückliefert. Die Methode addComment holt sich die Eingabenaus den Eingabefeldern und gibt diese über REST an die Schnittstelle weiter, wo über die zuständige Methode der Kommentar in der MongoDB gespeichert wird. ShowComment ist dafür zuständig, einen einzelnen Kommentar anzuzeigen. Dies ist für die Bearbeitung der einzelnen Kommentare notwendig. Und schließlich steht die Methode deleteComment dafür bereit einzelne Kommentare aus der MongoDB komplett zu entfernen.

Die REST Anfragen in den Methoden greifen auf die mit Spring MVC erstellte REST Schnittstelle zu, womit von der Oberfläche bis zur Datenbank ein vollständiger Durchstich erfolgt ist.

Damit habe ich einen Microservice entwickelt, der über eine grafische Benutzeroberfläche und eine Datenbankanbindung verfügt und darüber hinaus in einem einzelnen JAR verteilt werden kann. Der gesamte Quellcode steht auf GitHub zur Verfügung.

Viel Spaß beim Ausprobieren und dem praktischem Einstieg in den Architekturansatz der Microservices! Wenn ihr Fragen oder Anmerkungen habt, schießt los.

Michael Schuboth Michael Schuboth ist Software Engineer bei der adesso insurance solutions GmbH. Er ist technisch für die MIG|Suite verantwortlich, interessiert sich für die neuesten Technologietrends und leitet das Kölner Fußballteam.
Artikel bewerten:
1 Star2 Stars3 Stars4 Stars5 Stars
Loading...

Kommentare

Stavros Kamarianakis 9. April 2015

Klasse Beschreibung!

Kommentar hinzufügen:

Ihr Kommentar: