In diesem Eintrag ein Toolkit zum Entwickeln von Java-Microservice-Typen ["Helidon"](https: // helidon.), Das letzte Woche veröffentlicht wurde 1.0 veröffentlicht. Lassen Sie uns mit io / # /) einen Webdienst auf dem Mikro starten. Kurz gesagt, es konzentriert sich auf den kompakten Start der Web-API-IF, die für Microservices erforderlich ist, und zielt eher auf die Mindestkonfiguration als auf den vollständigen Stapel ab.
Helidon wird von Oracle hergestellt und auf GitHub als Open Source-Software unter einer Apache2-Lizenz veröffentlicht. Das Folgende ist eine kurze Übersetzung der Erklärung oben auf der Site.
――Einfach und schnell ~ Kompakt und schnell, da nur eine auf Netty basierende Bibliothek hinzugefügt wird --Unterstützt MicroProfile ~ Die kleine Klassenbibliothek von MicroProfile ist das Kernstück, und die JSON-Unterstützung (JAX-RS, JSON-P / B) und die Abhängigkeitsinjektion (CDI) werden unterdrückt. ――Hat einen reaktiven Webserver ~ Da Netty als Webserver integriert ist, können Sie sofort starten und die Funktionen von Netty in Richtung Reactive verwenden. ――Hat verschiedene beobachtbare Punkte ~ Es verfügt über Beobachtungspunkte wie Metriken und Ablaufverfolgung, die für Mikrodienste erforderlich sind, und es ist leicht mit Prometheus, Zipkin, Kubernetes usw. zu kombinieren.
Für diejenigen, die verstehen, können Sie sich die folgende Position vorstellen.
Die folgende Tabelle fasst zusammen, was auf Seite 1 der [Einführung] der Website (https://helidon.io/docs/latest/#/about/01_introduction) geschrieben steht. Das ist alles, was wir haben.
Schicht | Komponente | Erläuterung |
---|---|---|
Helidon SE | RxServer | Dient als Webserver |
Security | Unterstützt die Sicherheit | |
Config | Unterstützt Ladeeinstellungen | |
Helidon MP | JAX-RS(Jersey) | E / A-Unterstützung für Webanfragen |
JSON Processing | JSON-Verarbeitung | |
CDI | Abhängigkeitsspritze |
Solange Java8 ausgeführt werden kann, verwendet dieser Eintrag Corretto.
$ java -version
openjdk version "1.8.0_202"
OpenJDK Runtime Environment Corretto-8.202.08.2 (build 1.8.0_202-b08)
OpenJDK 64-Bit Server VM Corretto-8.202.08.2 (build 25.202-b08, mixed mode)
Verschieben wir die Quelle in Einführung.
Die Hauptklasse ist nur mit den folgenden OK. (Der Einfachheit halber wird ohne Hauptausnahmen geworfen)
package io.hrkt.helidontest;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import io.helidon.webserver.Routing;
import io.helidon.webserver.WebServer;
public class HelidontestApplication {
public static void main(String[] args) throws InterruptedException, ExecutionException, TimeoutException {
WebServer webServer = WebServer
.create(Routing.builder()
.any((req, res) -> res.send("It works!")).build())
.start().toCompletableFuture().get(10, TimeUnit.SECONDS);
System.out.println(
"Server started at: http://localhost:" + webServer.port());
}
}
Die build.gradle-Datei zum Ausführen auf Gradle sieht folgendermaßen aus:
plugins {
id 'application'
id 'java'
id 'idea'
id 'eclipse'
}
group = 'io.hrkt'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
mainClassName = "io.hrkt.helidontest.HelidontestApplication"
repositories {
mavenCentral()
}
dependencies {
implementation group: 'io.helidon.webserver', name: 'helidon-webserver', version: '1.0.0'
}
Lassen Sie es uns mit der Aufgabe "Ausführen" unter Verwendung des Plug-Ins "Anwendung" von gradle ausführen.
$ ./gradlew run
> Task :run
2 21, 2019 6:21:17 Uhr io.helidon.webserver.NettyWebServer lambda$start$7
Information: Channel '@default' started: [id: 0x229c8f03, L:/0:0:0:0:0:0:0:0:53721]
Server started at: http://localhost:53721
<=========----> 75% EXECUTING [6s]
> :run
Ich werde versuchen, darauf zuzugreifen.
$ curl localhost:53721
It works!
Es funktionierte. Die Quelle an dieser Stelle ist zu GitHub als 0.0.1.
Wenn Sie nur das oben Genannte verwenden, können Sie es nicht verwenden. Versuchen Sie also, Einstellungen hinzuzufügen, z. B. die Angabe der Portnummer.
Ändern Sie die obige Quelle ein wenig und verwenden Sie die ServerConfiguration-Klasse, um Folgendes zu tun:
int port = 8080;
ServerConfiguration configuration = ServerConfiguration.builder().port(port).build();
Routing routing = Routing.builder()
.any((req, res) -> res.send("It works!")).build();
WebServer webServer = WebServer
.create(configuration, routing)
.start().toCompletableFuture().get(10, TimeUnit.SECONDS);
System.out.println(
"Server started at: http://localhost:" + webServer.port());
$ ./gradlew run
> Task :run
2 21, 2019 7:30:45 Uhr io.helidon.webserver.NettyWebServer lambda$start$7
Information: Channel '@default' started: [id: 0x4a177e3e, L:/0:0:0:0:0:0:0:0:8080]
Server started at: http://localhost:8080
Auf diese Weise werden beim Starten von WebServer verschiedene Betriebseinstellungen übergeben und das Routing zum Erstellen des Dienstes übergeben.
Die Quelle an dieser Stelle ist zu GitHub als 0.0.2.
Fügen Sie eine Ressourcenklasse wie die folgende hinzu.
package io.hrkt.helidontest.resource;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;
@Path("/")
public class HelloWorld {
@GET
@Path("hello")
public Response hello() {
return Response.ok("Hello World!").build();
}
}
Fügen Sie die Einstellungen zum Routing der Hauptklasse hinzu. Für die obige Quelle sieht es so aus:
Routing routing = Routing.builder().register("/jersey",
JerseySupport.builder()
.register(HelloWorld.class)
.build())
.any((req, res) -> res.send("It works!")).build();
Versuchen Sie, unter dem als / jersey hinzugefügten Pfad auf / hello zuzugreifen.
$ curl localhost:8080/jersey/hello
Hello World!
Ich habe die Nachricht erhalten, die ich erwartet hatte. Für andere Pfade wird "It Works" wie oben beschrieben ausgegeben.
Probieren Sie die Funktionen rund um Config aus. Bereiten Sie die Konfigurationsdatei als src / main / resources / application.properties vor.
web.port=9801
Im obigen Quellcode ist der gelesene Teil so.
Config config = Config.create();
int port = config.get("web.port").asInt().orElse(8080);
Ich werde es starten.
$ ./gradlew run
> Task :run
[DEBUG](main) Using Console logging
2 21, 2019 8:08:21 Uhr io.helidon.webserver.NettyWebServer lambda$start$7
Information: Channel '@default' started: [id: 0x4ea36bbe, L:/0:0:0:0:0:0:0:0:9801]
Server started at: http://localhost:9801
Sie können oben sehen, dass der in der Konfigurationsdatei (9801) angegebene Wert gelesen wird und der Wert für Fallback (8080) nicht verwendet wird.
Für die Konfigurationsdatei können gemäß Dokument, YAML, HOCON und JSON zusätzlich zu den oben verwendeten "Eigenschaften" verwendet werden. Jeder verwendet zusätzlich zu den Abhängigkeiten die entsprechende JAR-Datei.
Config zeichnet die Ladezeit auf. Es hat auch eine Funktion, um die Aktualisierung der Einstellungsdatei zu erkennen und den entsprechenden Handler zu starten. Dies ist nützlich, wenn Sie die Konfiguration nach der Bereitstellung der App dynamisch ändern möchten.
Instant loadTime = config.timestamp();
System.out.println("Configfile was loaded at : " + loadTime);
Ich erklärte Helidon und versuchte, einen Webserver zu betreiben.
Zum Zeitpunkt des Schreibens des Eintrags gab es einige Teile, in denen der Tutorial-Code nicht so funktionierte wie er war (wie das Lesesystem für Einstellungsdateien wie im Versionshinweis), wahrscheinlich weil 1.0 veröffentlicht wurde und es eine kurze Zeit war, aber der Testcode und Es ist ein kompaktes Framework, das Sie anhand des Beispiels grob sehen können.
Die Quelle für diesen Eintrag ist GitHub (https://github.com/hrkt/helidontest).
Ich möchte einen weiteren Eintrag über das Hinzufügen von Sicherheit schreiben.
Recommended Posts