[JAVA] Versuchen Sie, mit Helidon einen WebAP-Server auf dem Mikro zu starten

Überblick

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のサイト

Angenommener Leser

Was ist Helidon?

Überblick

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.

Gesamtstruktur

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

Versuche dich zu bewegen

Annahme

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)

Schreiben Sie die Quelle

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'
}

Anlaufen

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.

Einstellungen hinzufügen

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.

Versuchen Sie, Jersey (JAX-RS) -Ressourcen hinzuzufügen

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.

Versuchen Sie, die Einstellungsdatei zu lesen

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);

Zusammenfassung

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

Versuchen Sie, mit Helidon einen WebAP-Server auf dem Mikro zu starten
Versuchen Sie, den Dienst auf Android Oreo zu verwenden
Versuchen Sie die Kommunikation mit gRPC auf einem Android + Java-Server
Ich habe versucht, Log4j2 auf einem Java EE-Server zu verwenden
Verwenden der Datenbank (SQL Server 2014) aus einem Java-Programm 2018/01/04
Versuchen Sie es mit dem Ruby on Rails-Abfrageattribut
Ich habe versucht, das GitHub-Repository als Bibliotheksserver zu verwenden
Versuchen Sie Hello World mit einfachem Java im Docker-Container
Richten Sie mit Bitnamis AMI ganz einfach einen Jenkins-Server in AWS ein
Probieren Sie Redmine auf dem Mac Docker aus
Erstellen Sie einen Minecraft-Server auf AWS
Setzen Sie ein Abzeichen auf das Symbol
Versuchen Sie es mit dem Nachrichtensystem Pulsar
Verwenden des lokalen Netzwerks mit iOS 14
Aufbau eines DLNA-Servers unter Ubuntu (vorerst nur verschieben)
Versuchen Sie, || anstelle des ternären Operators zu verwenden
Versuchen Sie es mit der Stream-API in Java
Ein Hinweis zur libGDX Utils-Klasse
Kick ShellScript auf dem Server von Java
Versuchen Sie, die Rails-App für EC2-Teil 1 bereitzustellen.
Versuchen Sie es mit der Emotion API von Android
Versuchen Sie es mit der Wii-Fernbedienung in Java
Versuchen Sie, einen GraphQL-Server mit grahpql-java-tools (+ kotlin) zu implementieren.
Ein kurzer Hinweis zur Verwendung von jshell mit dem offiziellen Docker-Image des JDK