¿Qué es Vertx?. Vertx es un framework Java que corre en la JVM y permite construir aplicaciones . Hasta aquí todo parece lo de siempre. Sin embargo se diferencia del resto en que su enfoque es similar al de Node.js y a la plataforma de JavaScript de servidor. La programación esta orientada de forma reactiva con un enfoque especial en Microservicios. Esto es algo que en el resto de los frameworks clásicos no tiene. Vamos a construir el ejemplo de hola mundo,para ello necesitaremos crear un proyecto Maven con Eclipse y añadir una dependencia:
<dependency> <groupId>io.vertx</groupId> <artifactId>vertx-web</artifactId> <version>3.2.0</version> </dependency>
Realizado este primer paso , el siguiente será construir una clase Java que va a recibir peticiones HTTP.
package com.arquitecturajava; import io.vertx.core.AbstractVerticle; import io.vertx.core.Future; import io.vertx.core.http.HttpServer; import io.vertx.core.http.HttpServerResponse; import io.vertx.ext.web.Router; public class AplicacionWeb extends AbstractVerticle { @Override public void start(final Future<Void> futuro) { HttpServer server = vertx.createHttpServer(); Router router = Router.router(vertx); router.route().handler(routingContext -> { HttpServerResponse response = routingContext.response(); response.putHeader("content-type", "text/html"); response.end("<html>hola vert x</html>"); }); server.requestHandler(router::accept).listen(8080); } }
Como se puede observar la clase AplicacionWeb extiende de AbstractVerticle un componente del framework. Un Verticle es un componente diseñado para ejecutarse dentro de Vertx. En este caso hemos construido la aplicación web de hola mundo pero en vez de usar Node.js hemos usado el nuevo framework. Vamos a desplegar esta aplicación como si se tratase de un Microservicio.
Microservicios y jars
Dos de las características fundamentales de los Microservicios es que son elementos independientes tanto en funcionalidad como en despliegue. Vamos a usar Maven para convertir nuestra pequeña clase en un elemento que se pueda desplegar solo. Para ello añadiremos un plugin a nuestro fichero pom.xml.
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>2.3</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <manifestEntries> <Main-Class>io.vertx.core.Starter</Main-Class> <Main-Verticle>com.arquitecturajava.AplicacionWeb</Main-Verticle> </manifestEntries> </transformer> </transformers> <artifactSet /> <outputFile>${project.build.directory}/${project.artifactId}-${project.version}-fat.jar</outputFile> </configuration> </execution> </executions> </plugin>
Maven (Shade) se encargará de empaquetar en un único jar nuestra clase y todas las dependencias que contenga a esto es a lo que comunmente se le denomina fatjar. Ejecutamos mvn package y empaquetamos.
Desde la consola ejecutamos : java -jar webVertx-1-fat.jar y el programa se ejecutará arrancando el servidor web en el puerto 8080 que nos devolverá el mensaje de hola sin la necesidad de tener un servidor de aplicaciones.
Otros artículos relacionados: MicroServicios , Java Lambda
Me parece muy interesante, hay que ponerle el ojo a este proyecto para poder evaluar su evolucion…
gracias
Hola Cecilio , estoy interesado en una consultoría , es posible ello ? de ser asi como podria comunicarme contigo
Hola Frank escribeme a contacto@arquitecturajava.com y me cuentas , muchas gracias 🙂
[…] artículos relacionados: VertX , JavaScript Reduce ,JavaScript Pure […]
Hola Cecilio, muchas gracias por tu articulo. Sin duda, el uso de VertX en los próximos años va a ir en aumento. Cada vez se habla más y le veo muchas más ventajas que usar node. Node solo fue un intento de los fronteneros para meterse en el back 😀
Lo que he echado en falta es quizas un articulo más conceptual de lo que hay detras de vertX para entender la filosofia. Y quizas analizarlo con un versus node.
Un saludo
Gracias por la idea , me la apunto para ver si puedo abordar algo del tema 🙂
Interesante no lo conocia
Ya se parecen a los primeros programas de java web: usando sockets + threads. 🙂
Dentro de poco harán un estándar de esto, con más especificaciones, serán parte de Java EE 9, y después crecerá tanto que parecerán todo un servidor java EE actual 😀
Veremos en que queda todo lo importante es que la innovación sigue presente en nuestra plataforma 🙂
Interesante. Quiero hacer alguna prueba con Vert.x cuando tenga un rato libre
gracias 🙂
Excelente artículo, Sr Álvarez. Vert.x es una revolución en la forma en cómo se construye software en Java. Con un enfoque basado en NodeJS, es muy fácil pensar en los muchos usos y soluciones que podemos darle.
Sin duda la programación de micro servicios se ve facilitada y natural en este nuevo enfoque de programación para la JVM.
Si queremos hacer frente a node esta claro que necesitamos cosas como como vertx 🙂
Creo que vertx tiene aun mucho camnio y en lo personal me quedaria con spring boot o saltaria a spark por que se parece un poco mas a nodejs y e visto un poco mas de movimiento en el https://platzi.com/blog/api-spark-java/
Yo creo que VertX es simplemente otro enfoque muy diferente a spark al tratarse de programación asincrona y reactiva. Mi opinión es que es otra plataforma dentro del mundo Java. Mientras que spark es un framework web
Jesús Perales, el enfoque de Vertx y el enfoque de Spark son muy diferentes. Ambos, con la gran ventaja de estar sobre el JVM, (poligotas y ejecutables extremadamente veloces), pero para cierto tipo de apps, Spark se queda corto, Spark es practicamente un enrutador de acciones, Vertx da soporte a reactive programming, ademas, igual que Node, Vertx es Non-blocking IO, mientras que Spark si.
Tampoco Spark es lo mas popular, diria que Spring Boot es mucho, pero mucho mas popular que Spark.
Jesús Perales, el enfoque de Vertx y el enfoque de Spark son muy diferentes. Ambos, con la gran ventaja de estar sobre el JVM, (poligotas y ejecutables extremadamente veloces), pero para cierto tipo de apps, Spark se queda corto, Spark es practicamente un enrutador de acciones, Vertx da soporte a reactive programming, ademas, igual que Node, Vertx es Non-blocking IO, mientras que Spark NO.
Tampoco Spark es lo mas popular, ni la unica de tantas opciones, diria que Spring Boot es mucho, pero mucho mas popular que Spark.
Te aconsejo que veas otras opciones (akka, Jooby, JavaLite, etc, etc)