Creare microservice in Java con Vert.x
Vert.x è una libreria che ci consente di creare microservice, e non solo, in diversi linguaggi.
Come potete vedere dalla documentazione, è composto di diversi "moduli", di cui i principali al momento sembrano:
- core
- web
- web client
Oggi vediamo un esempio di web in Java.
Se usate Maven potete aggiungere la dipendenza nel pom.xml:
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-web</artifactId>
<version>3.7.0</version>
</dependency>
Cominciamo con l'esempio più basico:
import io.vertx.core.Vertx;
import io.vertx.core.http.HttpServer;
import io.vertx.core.http.HttpServerResponse;
public class Main {
public static void main(String[] args) {
Vertx vertx = Vertx.vertx();
HttpServer server = vertx.createHttpServer();
server.requestHandler(request -> {
HttpServerResponse response = request.response();
response.putHeader("content-type", "text/plain");
response.end("Hello World!");
});
server.listen(8080);
System.out.println("In ascolto su http://localhost:8080/");
}
}
Aprite il browser su http://localhost:8080/ per vedere il risultato.
Il secondo esempio utilizza già l'oggetto Router, che useremo di più nei prossimi esempi; il codice qui sotto ha lo stesso risultato del primo esempio:
import io.vertx.core.Vertx;
import io.vertx.core.http.HttpServer;
import io.vertx.core.http.HttpServerResponse;
import io.vertx.ext.web.Router;
public class Main {
public static void main(String[] args) {
Vertx vertx = Vertx.vertx();
HttpServer server = vertx.createHttpServer();
Router router = Router.router(vertx);
router.route().handler(routingContext -> {
HttpServerResponse response = routingContext.response();
response.putHeader("content-type", "text/plain");
response.end("Primo esempio Router");
});
server.requestHandler(router).listen(8080);
System.out.println("In ascolto su http://localhost:8080/");
}
}
Qui sotto aggiungiamo una Route con un path specifico:
import io.vertx.core.Vertx;
import io.vertx.core.http.HttpServer;
import io.vertx.core.http.HttpServerResponse;
import io.vertx.ext.web.Route;
import io.vertx.ext.web.Router;
public class Main {
public static void main(String[] args) {
Vertx vertx = Vertx.vertx();
HttpServer server = vertx.createHttpServer();
Router router = Router.router(vertx);
Route route1 = router.route().path("/");
route1.handler(routingContext -> {
HttpServerResponse response = routingContext.response();
response.putHeader("content-type", "text/plain");
response.end("Primo esempio Router");
});
Route route2 = router.route().path("/path");
route2.handler(routingContext -> {
HttpServerResponse response = routingContext.response();
response.putHeader("content-type", "text/plain");
response.end("Ciao da route1!");
});
server.requestHandler(router).listen(8080);
System.out.println("In ascolto su http://localhost:8080/");
}
}
Aprite il browser e provate ad andare sia su http://localhost:8080/ che su http://localhost:8080/path.
Infine vediamo un esempio di come passare dei valori alla Route:
import io.vertx.core.Vertx;
import io.vertx.core.http.HttpMethod;
import io.vertx.core.http.HttpServer;
import io.vertx.core.http.HttpServerResponse;
import io.vertx.ext.web.Route;
import io.vertx.ext.web.Router;
public class Main {
public static void main(String[] args) {
Vertx vertx = Vertx.vertx();
HttpServer server = vertx.createHttpServer();
Router router = Router.router(vertx);
Route route1 = router.route().path("/");
route1.handler(routingContext -> {
HttpServerResponse response = routingContext.response();
response.putHeader("content-type", "text/plain");
response.end("Primo esempio Router");
});
Route route2 = router.route(HttpMethod.GET, "/ciao/:nome");
route2.handler(routingContext -> {
String nome = routingContext.request().getParam("nome");
HttpServerResponse response = routingContext.response();
response.putHeader("content-type", "text/plain");
response.end("Ciao " + nome);
});
server.requestHandler(router).listen(8080);
System.out.println("In ascolto su http://localhost:8080/");
}
}
Per questo esempio andate sia http://localhost:8080/ che su http://localhost:8080/ciao/VOSTRO_NOME.
Ovviamente il discorso non si esaurisce qui; questa libreria può fare molto di più.
Sicuramente tornerò sull'argomento, in quanto mi sembra molto interessante.
Enjoy!
java microservice vertx router route server httpserver
Commentami!