[JAVA] J'ai essayé QUARKUS immédiatement

Qui est QUARKUS?

Un nouveau framework Java avec GraalVM comme machine virtuelle d'exécution. Red Hat est le développeur.

The goal of Quarkus is to make Java a leading platform in Kubernetes and serverless environments while offering developers a unified reactive and imperative programming model to optimally address a wider range of distributed application architectures.

L'objectif de Quarkus est de faire progresser Java en fournissant aux développeurs un modèle de programmation réactif et impérial intégré pour prendre en charge un large éventail d'architectures d'applications distribuées dans des environnements tels que Kubernetes et sans serveur. Plate-forme.

Comme indiqué dans le blog officiel, il semble que cela corresponde à l'environnement d'exécution tel que sans serveur où Spring et Play sont légèrement retardés.

Aussi, comment écrire avec le modèle impératif conventionnel L'un des grands attraits est qu'il prend en charge les deux styles d'écriture réactifs.

RxJava devrait vous permettre d'obtenir un comportement d'application plus flexible et moins sensible à la latence.

Il est également flexible pour les bibliothèques existantes, alors n'est-ce pas plus que suffisant pour créer quelque chose rapidement?

En plus d'utiliser Hibernate ORM avec les spécifications par défaut Il semble prendre en charge MariaDB et PostgreSQL.

Au fait, vous pouvez également écrire en Kotlin.

Pour plus d'informations, cliquez ici. ↓↓↓ https://quarkus.io/get-started/

Environnement d'exécution

macOS Mojave 10.14.3

Ce dont vous avez besoin pour exécuter QUARKUS

--JJ1.8 avec JAVA_HOME et supérieur --Maven 3.5.3 et supérieur

Configuration de Maven

Puisqu'il s'agit d'un Mac, installez-le avec homebrew

brew update && brew install Maven

Vérifiez s'il est installé

mvn --version

Succès si ça revient comme ça

Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-25T03:41:47+09:00)
Maven home: /usr/local/Cellar/maven/3.6.0/libexec
Java version: 1.8.0_162, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/jre
Default locale: ja_JP, platform encoding: UTF-8
OS name: "mac os x", version: "10.14.3", arch: "x86_64", family: "mac"

Configuration de Graal VM

Installez GraalVM (graalvm-ce-1.0.0-rc13-macos-amd64.tar.gz) ↓↓↓ https://github.com/oracle/graal/releases

Définir la variable d'environnement GraalVM (GRAALVM_HOME) Veuillez passer le chemin en fonction de votre shell. bash -> bashprofile zsh -> zshrc

GRAALVM_HOME=/Library/Java/JavaVirtualMachines/graalvm-ce-1.0.0-rc13-macos-amd64/Contents/Home

Lancer un nouveau projet

Allez dans le répertoire où vous souhaitez placer le projet

$ mvn io.quarkus:quarkus-maven-plugin:0.11.0:create \
    -DprojectGroupId=jp.acme \
    -DprojectArtifactId=getting-started \
    -DclassName="org.acme.quickstart.GreetingResource" \
    -Dpath="/hello"

Cela lancera une application basée sur Maven basée sur QUARKUS. La structure du répertoire ressemble à ceci

image.png

Dockerfile pour / docker Envie de mettre le code Java nécessaire dans / java Ici, il y a GreetingResource.java et le contenu est ↓↓

GreetingResource.java


package org.acme.quickstart;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

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

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

Contient un code simple qui renvoie "hello" quand GET avec / hello.

Construire

#Démarrer en mode développement
$ mvn compile quarkus:dev

Le rechargement à chaud fonctionne lorsqu'il est lancé en mode développement. (Le rechargement à chaud est une fonction qui compile et reflète la différence à chaque fois qu'un changement est effectué)

Confirmer si le démarrage a réussi

Il démarrera sur le port 8080 avec les paramètres par défaut, alors appuyez sur curl et vérifiez si bonjour est retourné.

curl http://localhost:8080/hello

Génération binaire native

$ mvn package -Pnative -Dnative-image.docker-build=true

Qu'est-ce qu'un binaire natif en premier lieu? C'est un langage machine qui donne les instructions nécessaires à l'exécution, qui est préparée pour chaque machine d'exécution. En d'autres termes, en utilisant GraalVM, Linux crachera un langage machine optimisé pour Linux.

Au fait, ce processus prend du temps. Le document original dit également qu'il me donne 15 minutes.

Construction de Docker

Construisons Docker quand nous arriverons ici. Cliquez ici pour les commandes

$ docker build -f src/main/docker/Dockerfile -t <Nom de l'image> .

Cela créera l'image à l'aide du Dockerfile inclus dans la première application que vous venez de créer. L'intérieur du Dockerfile ressemble à ceci

####
# Before building the docker image run:
#
# mvn package -Pnative -Dnative-image.docker-build=true
#
# Then, build the image with:
#
# docker build -f src/main/docker/Dockerfile -t quarkus/getting-started .
#
# Then run the container using:
#
# docker run -i --rm -p 8080:8080 quarkus/getting-started
#
###
FROM registry.fedoraproject.org/fedora-minimal
WORKDIR /work/
COPY target/*-runner /work/application
RUN chmod 775 /work
EXPOSE 8080
CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]

COPY target/*-runner /work/application Comme vous pouvez le voir, il indique qu'il utilisera le binaire natif sous target.

Démarrer le conteneur Docker

$ docker run -i --rm -p 8080:8080 <Nom de l'image>

Vous pouvez démarrer l'image précédente en appuyant sur cette commande. Numéro de port 8080 A ce moment, la vitesse d'exécution est affichée, mais elle est extrêmement rapide.

Cela a commencé en 0,005 seconde à ma main.

Résumé

En utilisant QUARKUS, il semble possible de développer une application qui surmonte la faiblesse de la JVM qui prend en charge Docker par défaut, qui est la vitesse de démarrage. En outre, on peut dire qu'il convient au développement à grande échelle car un environnement de développement commun peut être créé en fonction de l'image Docker créée.

J'espère que ce sera l'occasion de créer un environnement où vous pourrez profiter encore plus de Java. Je suis tellement intéressé par GraalVM que j'écrirai un autre article sur GraalVM.

Recommended Posts

J'ai essayé QUARKUS immédiatement
J'ai essayé le framework Java "Quarkus"
J'ai essayé Spring.
J'ai essayé de mettre Tomcat
J'ai essayé youtubeDataApi.
J'ai essayé de refactoriser ①
J'ai essayé FizzBuzz.
J'ai essayé JHipster 5.1
[J'ai essayé] Tutoriel de printemps
J'ai essayé d'exécuter Autoware
J'ai essayé d'utiliser Gson
J'ai essayé d'utiliser TestNG
J'ai essayé Spring Batch
J'ai essayé d'utiliser Galasa
J'ai essayé node-jt400 (Programmes)
J'ai essayé node-jt400 (exécuter)
J'ai essayé node-jt400 (Transactions)
J'ai essayé node-jt400 (Construction de l'environnement)
J'ai essayé DI avec Ruby
J'ai essayé node-jt400 (écriture IFS)
J'ai essayé node-jt400 (mise à jour SQL)
J'ai essayé d'utiliser azure cloud-init
J'ai essayé la machine Spring State
J'ai essayé Drools (Java, InputStream)
J'ai essayé Rails débutant [Chapitre 1]
J'ai essayé d'utiliser Apache Wicket
J'ai essayé node-jt400 (requête SQL)
J'ai essayé d'utiliser Java REPL
J'ai essayé l'analyse du code source
J'ai essayé le problème FizzBuzz
J'ai essayé node-jt400 (flux SQL)
J'ai essayé node-jt400 (lecture IFS)
J'ai essayé Rails débutant [Chapitre 2]
J'ai essayé UPSERT avec PostgreSQL.
J'ai essayé BIND avec Docker
J'ai essayé de vérifier yum-cron
J'ai essayé la métaprogrammation avec Java
J'ai essayé d'utiliser anakia + Jing maintenant
J'ai essayé le didacticiel Angular + SpringBoot + PostgreSQL
J'ai essayé quelque chose qui s'appelle la recherche récursive
J'ai essayé d'utiliser Spring + Mybatis + DbUnit
J'ai essayé d'utiliser JOOQ avec Gradle
[K8s] J'ai essayé la communication entre les pods!
J'ai essayé l'analyse morphologique avec MeCab
J'ai essayé un petit docker de digdag.
J'ai essayé de résumer le support d'iOS 14
J'ai essayé d'interagir avec Java
J'ai essayé la communication UDP avec Java
J'ai essayé d'expliquer la méthode
J'ai essayé de mettre Domino11 dans CentOS7
[Rails] J'ai essayé de supprimer l'application
J'ai essayé d'utiliser l'API Java8 Stream
J'ai essayé l'outil de micro-benchmarking de Java JMH
J'ai essayé d'utiliser JWT en Java
J'ai essayé GraphQL avec Spring Boot
J'ai essayé de résumer l'apprentissage Java (1)