Quarkus — Überschall-Subatomare Java. Eine kurze Übersicht ĂŒber das Framework

Quarkus — Überschall-Subatomare Java. Eine kurze Übersicht ĂŒber das Framework

EinfĂŒhrung

Am siebten MĂ€rz wird die Firma RedHat (bald IBM) hat ein neues Framework — unterstĂŒtzt Quarkus die Verwendung des Advanced Message Queuing Protocol (. Laut den Entwicklern basiert dieses Framework auf GraalVM und OpenJDK HotSpot und ist fĂŒr Kubernetes gedacht. Der Quarkus-Stack umfasst: JPA/Hibernate, JAX-RS/RESTEasy, Eclipse Vert.x, Netty, Apache Camel, Kafka, Prometheus und andere.

Das Ziel der Entwicklung ist es, Java zur fĂŒhrenden Plattform fĂŒr die Bereitstellung in Kubernetes und die Entwicklung serverloser Anwendungen zu machen, indem den Entwicklern ein einheitlicher Ansatz fĂŒr die Entwicklung sowohl im reaktiven als auch im imperativen Stil geboten wird.

Wenn man sich die Maschine verwendet. Klassifikation der Frameworks ansieht, befindet sich Quarkus irgendwo zwischen „Aggregatoren/Code-Generatoren“ und „High-Level Fullstack-Frameworks“. Es ist bereits mehr als ein Aggregator, kommt aber nicht ganz an Full-Stack heran, da es auf die Backend-Entwicklung ausgelegt ist.

Es wird eine sehr hohe Geschwindigkeit beim Start der Anwendung und ein geringer Speicherverbrauch versprochen. Hier sind die Daten von der Website des Entwicklers:

Zeit vom Start bis zur ersten Antwort (s):

Konfiguration
REST
REST+JPA

Quarkus+GraalVM
0.014
0.055

Quarkus+OpenJDK
0.75
2.5

Traditioneller Cloud-Native-Stack*
4.3
9.5

Speicherverbrauch (Mb):

Konfiguration
REST
REST+JPA

Quarkus+GraalVM
13
35

Quarkus+OpenJDK
74
130

Traditioneller Cloud-Native-Stack*
140
218

Beeindruckend, nicht wahr?

*Informationen zu diesem Technologiestack habe ich nicht gefunden, man kann vermuten, dass es sich um eine Art Spring Boot mit zusĂ€tzlicher AusrĂŒstung handelt..

4) Wechseln Sie in das Verzeichnis, in das Sie das Beispielprojekt heruntergeladen haben:

Das einfachste auf Quarkus geschriebene Programm wĂŒrde so aussehen:

@Path("/hello")
public class GreetingResource {

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   public String hello() {
       return "hello";
   }
}

Das ist buchstÀblich eine Klasse und das reicht aus! Die Anwendung kann mit Maven im Entwicklungsmodus gestartet werden:

mvn compile quarkus:dev


$ curl http://localhost:8080/hello
hello

Der Unterschied zu einer ĂŒblichen Anwendung ist — es gibt keine Klasse Application! Quarkus unterstĂŒtzt Hot Reload, sodass man die Anwendung Ă€ndern kann, ohne sie neu zu starten, was die Entwicklung noch schneller macht.

Was kommt als NĂ€chstes? Man kann einen Dienst im Controller mit der Annotation hinzufĂŒgen Inject. Der Dienstcode:

@ApplicationScoped
public class GreetingService {

   public String greeting(String name) {
       return "Hallo " + name + "!";
   }
}

Controller:

@Path("/hello")
public class GreetingResource {

   @Inject
   GreetingService service;

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   @Path("/{name}")
   public String greeting(@PathParam("name") String name) {
       return service.greeting(name);
   }
}

$ curl http://localhost:8080/hello/developer
Hallo Entwickler!

Beachten Sie, dass in Quarkus die Standardannotation aus den vertrauten Frameworks — CDI und JAX-RS — verwendet werden. Es ist nichts Neues zu lernen, wenn Sie zuvor mit CDI und JAX-RS gearbeitet haben.

Arbeiten mit der Datenbank

Hibernate und standardmĂ€ĂŸige JPA-Annotationen fĂŒr EntitĂ€ten werden verwendet. Wie bei REST-Controllern muss nur wenig Code geschrieben werden. Es reicht aus, die AbhĂ€ngigkeiten in der Build-Datei anzugeben und die Annotationen zu setzen. @Entity und die Datenquelle in der application.properties zu konfigurieren.

Das war's. Keine sessionFactory, persistence.xml und andere Service-Dateien. Wir schreiben nur den Code, der benötigt wird. Bei Bedarf kann jedoch eine persistence.xml-Datei erstellt werden, um die ORM-Schicht feiner zu konfigurieren.

Quarkus unterstĂŒtzt das Caching von EntitĂ€ten, Sammlungen fĂŒr Eins-zu-viele-Beziehungen sowie Abfragen. Auf den ersten Blick sieht das großartig aus, aber es ist lokales Caching fĂŒr einen einzelnen Kubernetes-Knoten. Das bedeutet, dass die Caches verschiedener Knoten nicht untereinander synchronisiert sind. Ich hoffe, das ist nur vorĂŒbergehend.

Asynchrone CodeausfĂŒhrung

Wie bereits erwĂ€hnt, unterstĂŒtzt Quarkus auch den reaktiven Programmierstil. Der Code der vorherigen Anwendung kann in anderer Form geschrieben werden.

@Path("/hello")
public class GreetingResource {

   @GET
   @Produces(MediaType.TEXT_PLAIN)
   @Path("/{name}")
   public CompletionStage greeting(@PathParam("name") String name) {
       return CompletableFuture.supplyAsync(() -> {
           return "Hallo " + name + "!";
       });
   }
}

Asynchroner Code kann auch in einen Service verschoben werden, das Ergebnis bleibt dasselbe.

Tests

Tests fĂŒr Quarkus-Anwendungen können mit JUnit4 oder JUnit5 geschrieben werden. Im Folgenden ist ein Beispieltest fĂŒr den Endpoint, der mit RestAssured geschrieben wurde, aber auch ein anderer Rahmen kann verwendet werden:

@QuarkusTest
public class GreetingResourceTest {

   @Test
   public void testGreetingEndpoint() {
       String uuid = UUID.randomUUID().toString();
       given()
         .pathParam("name", uuid)
         .when().get("/hello/{name}")
         .then()
           .statusCode(200)
           .body(is("Hallo " + uuid + "!"));
   }
}

Die Annotation @QuarkusTest weist an, die Anwendung zu starten, bevor die Tests ausgefĂŒhrt werden. Ansonsten ist der Code bekannt und vertraut fĂŒr alle Entwickler.

PlattformabhÀngige Anwendung

Da Quarkus eng mit GraalVM integriert ist, kann natĂŒrlich plattformabhĂ€ngiger Code generiert werden. Dazu muss GraalVM installiert und die Umgebungsvariable GRAALVM_HOME gesetzt werden. Dann muss ein Build-Profil angegeben werden und bei der Erstellung der Anwendung angegeben werden:

mvn package -Pnative

Interessanterweise kann die generierte Anwendung getestet werden. Das ist wichtig, da die AusfĂŒhrung von „nativem“ Code von der AusfĂŒhrung auf der JVM abweichen kann. Die Annotation @SubstrateTest fĂŒhrt plattformabhĂ€ngigen Code der Anwendung aus. Die Wiederverwendung bestehenden Testcodes kann durch Vererbung erfolgen, sodass der Code zum Testen einer plattformabhĂ€ngigen Anwendung so aussieht:

@SubstrateTest
public class GreetingResourceIT extends GreetingResourceTest {

}

Das generierte Bild kann in Docker verpackt und in Kubernetes oder OpenShift ausgefĂŒhrt werden, was detailliert beschrieben ist in Anleitung.

Werkzeug

Das Framework Quarkus kann mit Maven und Gradle verwendet werden. Maven wird vollstĂ€ndig unterstĂŒtzt, im Gegensatz zu Gradle. Leider unterstĂŒtzt Gradle derzeit nicht die Erstellung eines leeren Projekts, es gibt auf der Website detaillierte Lehrbuch.

Erweiterungen

Quarkus ist ein erweiterbares Framework. Momentan gibt es etwa 40 Erweiterungen, die verschiedene FunktionalitĂ€ten hinzufĂŒgen – von der UnterstĂŒtzung von Spring DI-Container und Apache Camel bis hin zu Logging und der Veröffentlichung von Metriken fĂŒr laufende Dienste. Außerdem gibt es bereits eine Erweiterung zur UnterstĂŒtzung der Anwendungsentwicklung in Kotlin, zusĂ€tzlich zu Java.

Fazit

Meiner Meinung nach ist Quarkus durchaus im Trend. Die Entwicklung von Backend-Code wird immer einfacher, und dieses Framework vereinfacht und beschleunigt die Entwicklung von Diensten noch weiter, indem es native UnterstĂŒtzung fĂŒr Docker und Kubernetes hinzufĂŒgt. Ein großer Vorteil ist die eingebaute UnterstĂŒtzung von GraalVM und die Erstellung plattformabhĂ€ngiger Bilder, was es ermöglicht, Dienste wirklich schnell startfĂ€hig und speichersparend zu machen. Das ist in der heutigen Zeit, in der Mikroservices und serverlose Architekturen im Trend liegen, sehr wichtig.

Die offizielle Website ist – quarkus.io. Beispiele fĂŒr Projekte zum schnellen Start sind bereits auf GitHub.

Quelle: habr.com

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster