Le sans serveur est très excitant. Certaines personnes ont dit que Java ne convient pas au serveur sans serveur en raison du soi-disant problème de démarrage à froid, mais la situation a changé en raison de l'apparition de microframes telles que Micronaut introduit cette fois et de la fonction de création d'image native (Substrate VM) de Graal VM. Cela a beaucoup changé.
En ce qui concerne le flux ici, il y a de merveilleux supports de conférence à "JJUG CCC 2019 Fall" par @_kensh et @jyukutyo, alors soyons ravis de les voir.
Maintenant, faisons du Java sans serveur avec Micronaut!
Micronaut prétend être un "framework pour serverless" dans sa copie catch. Nous avons également organisé une session sur Micronaut et Lambda à "re: Invent 2019". Comparé à d'autres frameworks, je me suis concentré sur le serverless, et personnellement je l'ai trouvé très attractif, j'ai donc choisi cette fois.
Je pense qu'il existe trois micro-frameworks majeurs qui peuvent être utilisés par Java (langages JVM tels que).
Tous sont des cadres que j'attends avec impatience à l'avenir. J'ai comparé la copie de capture, etc., veuillez donc vous y référer.
Cadre | copie de capture | Traduction gratuite |
---|---|---|
Micronaut | A modern, JVM-based, full-stack framework for building modular, easily testable microservice and serverless applications. | C'est un framework full-stack moderne pour les microservices et sans serveur |
Quarkus | A Kubernetes Native Java stack tailored for OpenJDK HotSpot and GraalVM. | Framework natif Kubernetes optimisé pour OpenJDK HotSpot et GraalVM |
Helidon | Lightweigt. Fast. Crafted for Microservices. | C'est un framework léger et rapide conçu pour les microservices. |
https://www.githubcompare.com/
Maintenant, configurons Micronaut. Le Site officiel recommande l'installation avec SDKMAN, alors installons-le selon cette procédure.
$ curl -s https://get.sdkman.io | bash
Redémarrez le terminal ou exécutez le shell suivant
$ source "$HOME/.sdkman/bin/sdkman-init.sh"
OK si la commande sdk réussit
$ sdk version
SDKMAN 5.7.4+362
$ sdk install micronaut
OK si la commande mn passe
$ mn -V
| Micronaut Version: 1.2.7
| JVM Version: 11.0.5
Le modèle de projet est créé via la commande mn. Vous pouvez le démarrer en mode interactif en entrant seulement mn. C'est pratique car vous pouvez également exécuter des commandes. Vous pouvez également retracer l'historique des commandes.
$ mn
| Starting interactive mode...
| Enter a command name to run. Use TAB for completion:
mn>
Vous pouvez vérifier comment utiliser la commande avec mn> help
.
mn> help
Usage: mn [-hnvVx] [COMMAND]
Micronaut CLI command line interface for generating projects and services.
Commonly used commands are:
create-app NAME
create-cli-app NAME
create-federation NAME --services SERVICE_NAME[,SERVICE_NAME]...
create-function NAME
・ ・ ・
Cette fois, je veux créer une fonction Lambda, alors utilisons create-function
.
mn> create-function hello-world
| Generating Java project...
| Function created at /Users/cojohnny/micronaut/hello-world
| Initializing application. Please wait...
Quittez le mode interactif une fois et vérifiez le projet généré.
mn> exit
$ cd hello-world/
$ tree
.
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── micronaut-cli.yml
├── settings.gradle
└── src
├── main
│ ├── java
│ │ └── hello
│ │ └── world
│ │ ├── Application.java
│ │ ├── HelloWorld.java
│ │ └── HelloWorldFunction.java
│ └── resources
│ ├── application.yml
│ └── logback.xml
└── test
└── java
└── hello
└── world
├── HelloWorldClient.java
└── HelloWorldFunctionTest.java
Jetons un coup d'œil à la source générée. La méthode apply de HelloWorldFunction.java est la fonction Lambda. L'implémentation actuelle est simplement un processus qui renvoie la valeur définie du nom JSON d'entrée.
HelloWorldFunction.java
package hello.world;
import io.micronaut.function.executor.FunctionInitializer;
import io.micronaut.function.FunctionBean;
import javax.inject.*;
import java.io.IOException;
import java.util.function.Function;
@FunctionBean("hello-world")
public class HelloWorldFunction extends FunctionInitializer implements Function<HelloWorld, HelloWorld> {
@Override
public HelloWorld apply(HelloWorld msg) {
return msg;
}
/**
* This main method allows running the function as a CLI application using: echo '{}' | java -jar function.jar
* where the argument to echo is the JSON to be parsed.
*/
public static void main(String...args) throws IOException {
HelloWorldFunction function = new HelloWorldFunction();
function.run(args, (context)-> function.apply(context.get(HelloWorld.class)));
}
}
Construisons avec gradlew
.
$ ./gradlew assemble
Deux types de Jar sont terminés.
$ tree build/libs/
build/libs/
├── hello-world-0.1-all.jar
└── hello-world-0.1.jar
Celui avec -all
à la fin du nom de fichier est" Fat Jar "qui contient les bibliothèques dépendantes, alors téléchargez-le sur Lambda.
Importons le fichier "hello-world-0.1-all.jar" créé sur AWS. Définissez "hello.world.HelloWorldFunction :: apply" dans Handler.
Exécutons maintenant la fonction Lambda. Définissez le JSON de la requête à partir du bouton "Test" en haut de la console Lambda. Spécifiez ce qui suit pour JSON.
{
"name": "Lambda"
}
Exécutez "Test"! Ça a marché!
Cette fois, ce n'était qu'un processus simple, mais vous pouvez facilement créer et exécuter une fonction Lambda qui inclut un framework. En utilisant un framework léger tel que Micronaut, il sera possible de construire Lambda tout en utilisant les riches fonctionnalités du framework, il semble donc que l'application de l'architecture sans serveur aux applications à grande échelle continuera à se développer.
En ce qui concerne le démarrage à froid, qui était la plus grande préoccupation, les obstacles pour l'application à l'environnement de production sont de plus en plus bas car une solution puissante appelée «accès concurrentiel provisionné» annoncée à re: Invent 2019 a été présentée l'autre jour.
J'ai vraiment hâte de voir le monde sans serveur qui devrait se développer davantage en 2020! En particulier, même ceux qui n'avaient pas trop familier à moins de serveur ont été impliqués dans le système à grande échelle de Java, je pense qu'il est en avance au début est maintenant. Commençons ensemble avec Java sans serveur!
Essayez les derniers frameworks Java, Helidon, Micronaut, Quarkus ensemble jusqu'à native-image Micronaut User Guide AWS Lambda announces Provisioned Concurrency
Recommended Posts