Micronaut es un framework basado en la máquina virtual de Java (JVM), orientado a la construcción de microservicios, bajo Java, Groovy o Kotlin.

Una de los puntos fuertes de Micronaut es que permite ejecutar un Hello World con 8 MB de heap y ocupando en torno a 10MB además mejora también los tiempos de arranque y consumos de memoria, sobre el framework de facto para la construcción de microservicios como es Spring (en próximos artículos se analizara Spring Boot vs Micronaut).

Las principales características que tiene Micronaut, y que puede que sea un buen framework para la construcción de microservicios, incluso por delante de Spring Boot pueden ser:

  • Arranque de las aplicaciones en un tiempo muy rápido.
  • Un consumo de memoria bastante lineal sin tener picos de consumos.
  • Twelve factor.
  • Inyección de dependencias.

Microanut proporciona un servidor y cliente HTTP que esta basado en Netty por lo que proporciona non-blocking y event-driven programming. La utilización e implementación de este framework, para aquellos que están familiarizados con las anotaciones no tendrán mucho problema, ya que tiene un buen número de ellas con las que nos simplifica el desarrollo y reduce complejidad.

Al igual que los mejores frameworks que ahora mismo podemos utilizar, micronaut soporta GORM, el cual nos proporciona un buen número de APIs para acceder a diferentes software de terceros como puede ser GraphQL, Redis, MongoDb y alguno más.

El objetivo de este artículo es crear una pequeña aplicación utilizando Micronaut e ir poco a poco adentrandonos en este framework.

¿Qué necesitamos?

  • JDK 1.8 o superior
  • Un IDE a tu elección, en mi caso intellij.
  • SDKMAN

¿Cómo empezar?

Para empezar con micronaut lo mejor es utilizar su cliente, para ello vamos a instalarlo con SDKMAN:

$ sdk install micronaut
$ sdk install micronaut 1.3.1.BUILD-SNAPSHOT
$ mn create-app my-app

Por defecto el cliente crea una aplicación con Java y usa Maven por defecto.

Puede jugar un poco con el cliente tecleando:

$ mn
| Starting interactive mode...
| Enter a command name to run. Use TAB for completion:
mn>

Creando un cliente

Como hemos comentado, Micronaut incluye tanto el HTTP server como el cliente, por lo que se podrá crear una aplicación y lanzarla en el navegador, en el puerto elegido o el 8080 por defecto, sin necesidad de hacer ninguna configuración extra:

Para poder crear servicios que respondan a peticiones http, lo primero sera crear un controlador:

import io.micronaut.http.MediaType;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;

@Controller("/hello") 
public class HelloController {

    @Get(produces = MediaType.TEXT_PLAIN) 
    public String hello() {
        return "Hello World"; 
    }
}
  • La anotación @Controller, es la anotación para indicar que esa clase es un controlador y un punto de entrada en el servicio.
  • La anotación GET, indica el verbo de la request.

Desde el navegador, o haciendo un curl al puerto 8080, se podrá ver el resultado:

$ curl http://localhost:8080/hello
Hello World

¿Cómo hacemos test con Micronaut?

Testear es realmente sencillo, vamos a utilizar Spock, aunque con JUnit, tendríamos el mismo resultado:

import io.micronaut.context.annotation.Property;
import io.micronaut.http.HttpRequest;
import io.micronaut.http.client.HttpClient;
import io.micronaut.http.client.annotation.Client;
import io.micronaut.runtime.server.EmbeddedServer;
import io.micronaut.test.annotation.MicronautTest;
import org.junit.jupiter.api.Test;

import javax.inject.Inject;

import static org.junit.jupiter.api.Assertions.assertEquals;

@MicronautTest
public class HelloControllerSpec {
    @Inject
    EmbeddedServer server; 

    @Inject
    @Client("/")
    HttpClient client; 

    @Test
    void testHelloWorldResponse() {
        String response = client.toBlocking() 
                .retrieve(HttpRequest.GET("/hello"));
        assertEquals("Hello World", response); //) 
    }
}

Para poder configurar el test lo básico y primer paso es añadir la anotación @MicronautTest.

Básicamente lo que se ha hecho para poder realizar el test del controlador creado previamente, ha sido la creación de un cliente http, y realizar la inyección de un servidor embebido.

Una de las virtudes de este framework, suelen ser sus tiempos de arranque, en este caso para poder ejecutar el test es bastante superior a muchos de los framework que solemos usar, y además si necesidad de realizar Mocks, nos permite comprobar y realizar test de nuestros servicios.

Dame más:

Micronaut nos da todavía algo más que una rápida implementación:

  • Servicio de descubrimiento.
  • Zipkin
  • Hystrix y Ribbon
  • Soporte Serverless con AWS Lambda
  • Consul
  • Seguridad
  • Control por IP.
  • Eureka
  • …. etc

Si quieres te puedes descargar un hello world pulsando aquí .


Deja una respuesta

Tu dirección de correo electrónico no será publicada.