© Darcraft/Shutterstock.com
Das neue Serverless API in Quarkus

Take me to Funqy Town!


„Gotta make a move to a town that’s right for me … take me to Funqytown“, so oder so ähnlich sang schon Lipps, Inc. im Discoklassiker von 1979. Jetzt hat mit Funqy ein einfaches API Einzug in Quarkus gehalten, das es dank Abstraktion sehr einfach machen soll, kleine, schlanke (HTTP-)Services für verschiedene Serverless-Umgebungen zu schreiben, ohne mit zu viel Umgebungsdetails vertraut sein zu müssen. Ist das nun endlich der (die) heilige Graal(VM)?

Im Java Magazin 4.2020 [1] habe ich bereits darüber geschrieben, wie einfach es mit Quarkus ist, Serverless Functions zu schreiben, dank GraalVM als natives Artefakt zu deployen und so die durch die JVM bedingten Cold-Start-up-Latenzen auf ein Minimum zu reduzieren. Zwischenzeitlich ist viel passiert und Quarkus hat sich rasant und umfangreich weiterentwickelt. Nicht nur die Features sind gewachsen. Dank stetig verbessertem und vereinfachtem Convention-over-Configuration-Paradigma ist das Handling zu einem Kinderspiel geworden. Vieles von dem, was ich in dem o. g. Artikel geschrieben habe, hat sich deutlich vereinfacht, ist eine optionale Konfiguration geworden oder komplett entfallen. Großes Lob an das Quarkus-Team – ihr macht einen tollen Job!

Mit Version 1.4 hat in Quarkus das Funqy API [2] Einzug gehalten. Quarkus Funqy ist das neue Serverless API, das über verschiedene Cloud-Umgebungen wie AWS Lambda, Azure Functions, Google Cloud Functions und Knative Events portabel einsetzbar ist, ohne sich mit den providerspezifischen Eigenschaften zu sehr im Detail auseinandersetzen zu müssen (so zumindest die Versprechungen). Herkömmliche On-Premise-Umgebungen werden mit Funqy ebenfalls unterstützt, man ist also nicht auf eine Cloud-Umgebung angewiesen.

Die Idee von Funqy ist dabei sehr einfach, wie Bill Burke, einer der Red-Hat-Entwickler im Quarkus-Team, auf seiner Website [3] schreibt: Man muss lediglich eine Java-Methode schreiben, die einen optionalen Eingabeparameter und einen optionalen Rückgabewert hat (Listing 1). Die Ein- und Ausgabeparameter können primitive Datentypen sein oder auch POJOs (Listing 2). An diese Methode kommt die neue Annotation @Funqy, und fertig ist die Funktion. Die Quarkus Funqy Extension kümmert sich dann um den Rest – je nach gewählter Zielumgebung. Funqy-Klassen sind normale Quarkus-Komponenten, in die andere Komponenten via CDI oder auch Spring DI injectet werden können.

Listing 1: Eine einfache Funktion mit simplen Datentypen – das Minimum für Funqy

public class SimpleFunction { @Funq public String hello(String name) { return "Hello, " + name; } }

Listing 2: Komplexere Funktion mit POJOs als Ein-/Ausgabeparameter und CDI-injiziertem Service

public class GreetingFunction { @Inject GreetingService service; @Funq public Greeting greet(Friend friend) { return service.greet(friend.getName()); } } @ApplicationScoped public class GreetingService { public Greeting greet(String name) { return new Greeting(name); } } public class Greeting { private String message; public Greeting(String name) { this.message = "Hello, " + name; }  // getter... } public class Friend { public String name;  // getter/setter .... }

Motivation

Die Motivation hinter Funqy ist die Weiterführung des Quarkus-Gedankens, die Java-Entwicklung für Cloud-Umgebungen so stark wie möglich zu vereinfachen, ohne sie dabei einzuschränken. Quarkus hat neben dem „Container-first“-Ansatz aber auch einen Schwerpunkt auf die Entwicklung von Serverless Functions mit Java gelegt. Begonnen hat dieser Serverless-Fokus mit der Integration von REST Frameworks zur einfachen Nutzung in Serverless-Umgebungen wie AWS Lambda. Da Red Hat ebenfalls an der Entwicklung ...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang