Ir al contenido principal

Cómo crear microservicios con Red Hat Quarkus

Hoy vamos a ver como enfoca Red Hat la creación de Microservicios con Quarkus, los cuales también pueden ayudarnos en el desarrollo del negocio de nuestra empresa.

Apoyándose en Quarkus para la creación de forma ágil y con un peso y consumo de memoria mínimo de estos microservicios. Especialmente diseñados para su creación como contenedores y su despliegue en entornos sin servidor, de nube y de Kubernetes. 

¿Qué es Red Hat Quarkus? 

Red Hat Quarkus es un framework Java, que está especialmente orientado a crear y desplegar aplicaciones Java en la nube, con un tamaño y consumo mínimo. Adaptado para seguir los estándares empresariales de Jakarta, se apoya en los frameworks MicroProfile, RESTEasy o Hibernate para la creación de los microservicios. 

Todo ello por supuesto en un marco de soporte proporcionado por Red Hat, una empresa multinacional proveedora de soluciones de software open source a nivel empresarial. Y perfectamente integrado dentro de un ecosistema de aplicaciones líderes en el sector como Kubernetes, ActiveMQ, Kafka, OpenShift, etc. 

En anteriores posts hemos visto cómo hacer integraciones con Red Hat, que puedes consultar aquí. Específicamente con Red Hat Fuse, ahora llamado Red Hat Integration. Ésta es la solución de Red Hat para integrar sistemas con una visión actualizada y orientada a la nube, conocido comúnmente como ESB en sistemas más legacy.

Cómo crear microservicios con Red Hat Quarkus

1. Desarrollo

Partiendo desde cero, lo mejor es crear la estructura del proyecto con ayuda de un arquetipo. Y esto también lo podemos realizar con una de las herramientas que nos proporciona Red Hat. En este caso el plugin quarkus-maven-plugin y el siguiente comando:

mvn com.redhat.quarkus.platform:quarkus-maven-plugin:2.13.8.Final-redhat-00004:create \
    -DprojectGroupId=com.chakray.example -DprojectArtifactId=ms-with-panache

Para no hacerlo muy básico, añadiremos persistencia al microservicio. Lo cual nos permitirá tener el comienzo para generar un microservicio más complejo que nos permita la consulta, creación y edición de datos de una base de datos. En nuestro caso, contaremos con las siguientes librerías principales:

  • Creación de API REST: quarkus-resteasy-reactive
  • Transformación y acceso a datos: quarkus-hibernate-orm-panache
  • Formato de los mensajes: quarkus-resteasy-reactive-jackson

La generación de la API que permita al microservicio ofrecer una interfaz a terceros sistemas, puede ser una de las partes más sencillas, sobre todo si tienes experiencia previa con frameworks de Java empresariales. Aún así daremos una pequeña explicación de cómo poder generar cualquier método:

  • @Path(“/book”): Nos permite indicar cual es la raíz del microservicio, en que contexto atiende a llamadas. También se usa en cada uno de los recursos, si tiene un contexto posterior diferente.
  • @GET, @DELETE, etc : Indica el verbo HTTP con el cual realizaremos la invocación.
  • @QueryParam : Nos permite indicar parámetros que viajan en la URL
  • @PathParam: Nos permite indicar parámetros que forman parte del contexto. Han debido indicarse en la anotación @Path. 
  • @Produces y @Consumes: Nos permite indicar el formato de la salida y de lo que espera de entrada. 

Para la parte de la persistencia utilizaremos Panache, que pondrá a nuestra disposición dos patrones distintos para llevarla a cabo. 

Por un lado tendremos el patrón Repository, donde crearemos una clase intermedia que será la encargada de realizar las operaciones contra la base de datos. Y que al extender de la clase PanacheRepository, pondrá a nuestra disposición un conjunto amplio de métodos básicos de acceso. 

@ApplicationScoped
@Transactional
public class BookRepository implements PanacheRepository<Book>{ }

Y por otro lado contaremos con el patrón Active Record, donde será la propia entidad la que pondrá a disposición del programador, los distintos métodos de persistencia. 

@Entity
@Table(name = "BOARDGAME")
public class BoardGame extends PanacheEntity {
    //Cuidado! Con PanacheEntity no necesitamos ni getter/setter ni id
    public String designer;
    public String name;    
}

Aquí podemos ver la clase principal de nuestro microservicio:

@Path("/boardgame")
public class BoardGameResource {
    @GET
    @Path("/{id}")
    @Produces(MediaType.APPLICATION_JSON)
    public BoardGame getBoardGameById(@PathParam("id") final Long id) {
        return BoardGame.findById(id);
    }

    @POST
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    @Transactional
    public BoardGame persist(final BoardGame newBoardGame) {
        BoardGame.persist(newBoardGame);
        return newBoardGame;
    }
}


2. Configuración

Para poder configurar las distintas características, lo podremos hacer a través del fichero application.properties. Este es el fichero único de configuración y a través del mismo podremos configurar no solo cualquier librería a utilizar dentro del proyecto sino que también indicar valores por entornos. Aquí indicamos algunas:

  • quarkus.http.port: Podemos indicar en qué puerto admite las llamadas
  • quarkus.datasource.username/password/jdbc.url: Podemos indicar la conexión a la BBDD. 
  • quarkus.hibernate-orm: Tiene múltiples opciones para indicar si queremos o no que se genere el esquema de la BBDD al iniciar la aplicación y los ficheros para ello. 

3. Despliegue

Una vez que hemos desarrollado y configurado el proyecto, vamos a proceder a arrancarlo. Como estamos en desarrollo, utilizaremos el comando:

mvn quarkus:dev

Otro punto a favor del uso de Red Hat Quarkus, es que podemos recargar fácilmente la aplicación y comprobar los cambios, simplemente pulsando la tecla ‘s’ en la consola donde lo tengamos ejecutando. 

Y por supuesto, si añadimos más configuración y extensiones Quarkus que lo posibiliten, podemos generar imágenes nativas que vayan a ser utilizadas por Kubernetes.

Conclusión

Como habéis podido comprobar, con el apoyo de Red Hat y Chakray, puedes disponer de microservicios que ayuden al desarrollo de tu negocio. Contando con los beneficios de una tecnología que está en alza, que genera proyectos ágiles, ligeros y orientados a su despliegue en la nube. 

Si necesitas ayuda, aquí estamos para ayudar a tu empresa, ¡contáctanos hoy mismo!

¡Habla con nuestros expertos!

Contacta con nuestro equipo y descubre las tecnologías de vanguardia que potenciarán tu negocio.

contáctanos