Micronaut für zeitgemäße Webanwendungen

Das JVM-Framework Micronaut eignet sich sowohl für Cloud-Native als auch für Webanwendungen: Ist es eine Alternative zu Grails und Spring Boot?

In Pocket speichern vorlesen Druckansicht 1 Kommentar lesen
Micronaut für zeitgemäße Webanwendungen

(Bild: Foto von Jonas Verstuyft / Unsplash)

Lesezeit: 15 Min.
Von
  • Jonas Havers
Inhaltsverzeichnis

Micronaut ist ein zeitgemäßes JVM-Framework zur Entwicklung modularer, einfach testbarer Webanwendungen in den Sprachen Java, Kotlin und Groovy. Hinter dem Framework steckt das Entwicklungsteam von Object Computing, das auch das Grails Framework entwickelt hat. Unabhängig davon, ob man eine Anwendung für die Kommandozeile, eine Serverless Function, einen HTTP-Client oder -Server programmieren, eine zeitlich geplante Aufgabe ausführen, eine Anwendung zur Stream-Verarbeitung oder ähnliches entwickeln möchte: Das Framework bietet Werkzeuge dafür.

Ein früherer Artikel hat die Cloud-nativen Microservice-Features des Frameworks betrachtet. Dieser Beitrag schließt daran an und beleuchtet einige Funktionen, die für zeitgemäße Webanwendungen im Kontext beliebiger Architekturstile hilfreich sind, um mit Micronaut schnell Anwendungen zu entwickeln und in Produktivumgebungen kontrolliert betreiben zu können.

Micronaut bietet Unterstützung für die Überwachung von Anwendungen über diverse Endpunkte. Sie sind über spezielle URIs erreichbar und liefern Details über den Zustand der Anwendung. Dazu gehören eine Informationsschnittstelle mit unter anderem dem Namen und der Version der Anwendung (Info), Metriken (Metrics), eine Liste der geladenen Beans (Beans), die Funktionsbereitschaft der Anwendung, des Systems und angebundener Systeme wie der Datenbank (Health), eine Liste der verfügbaren Logger (Loggers) sowie öffentliche HTTP-Schnittstellen (Routes). Um Konfigurationen zu aktualisieren (Refresh) oder den Server zu stoppen (Server Stop), gibt es zwei weitere Endpunkte. Für spezielle Anforderungen können Entwickler darüber hinaus mit @Endpoint-annotierten Klassen eigene Management-Endpunkte implementieren.

Einige der durch die Endpunkte bereitgestellten Informationen sind sensibel. Der Zugriff auf sie ist auf authentifizierte Benutzer beschränkt und kann per Konfiguration je Endpunkt auch nicht-angemeldeten Personen gestattet sein. Anwender können Endpunkte darüber hinaus individuell aktivieren und deaktivieren.

Für die Erfassung und Verwaltung von Metriken verwendet Micronaut die Bibliothek Micrometer, die auch Spring Boot seit Version 2 einsetzt. Das Reporting der Metriken erfolgt an Dienste wie Graphite, Prometheus, StatsD oder Atlas.

Micronaut 1.0 bietet Unterstützung für Swagger zur Kompilierzeit. Die OpenAPI-Referenzimplementierung Swagger gilt als das Standardwerkzeug zur Beschreibung von APIs. Die Mehrheit der Frameworks, die Swagger integrieren, stellen Schnittstelleninformationen zur Laufzeit mit einem entsprechenden Aufwand für Reflections und Caches zusammen. Mit Hinblick auf Performance und Speicherverbrauch ist dies durch den Compile-Time-Ansatz von Micronaut besser gelöst.

Nach der deklarativen Konfiguration mit Annotationen, erstellt Micronaut zur Kompilierzeit die Swagger YAML. Entwickler können sie danach als statische Ressource zur Anwendung hinzufügen und in die Swagger-Benutzeroberfläche importieren.

Micronaut unterstützt jedes Framework, das den Standard für asynchrone Datenströme (Reactive Streams) implementiert, einschließlich den gängigen wie RxJava (in Version 1 und 2) und Reactor. Der Einsatz von Netty ermöglicht die webseitige nicht-blockierende Reaktivität. Auf der Basis ist es möglich, über alle Schichten vollständig reaktive und nicht-blockierende Anwendungen zu erstellen. Die Annahme, Behandlung und Beantwortung von HTTP Requests ist hierbei nicht blockierend an einen Thread gebunden, wie es bei Anwendungen der Fall ist, die zum Beispiel den Tomcat Container und damit die Servlet API nutzen. Threads können stattdessen für die Annahme von vielen Anfragen wiederverwendet werden.