Smallrye-Mutiny!

Sergio Rodríguez Calvo
2 min readJul 24, 2021

--

Mutiny es una librería de programación reactiva para Java, desarrollada para ser intuitiva y facilitar la creación de aplicaciones reactivas, incluso para aquellos que no están muy duchos con este tipo de paradigmas de programación.

Pero, ¿Qué es la programación reactiva? Pues vamos a resumirlo muy rápido, para no hacer eterna esta entrada. Digamos que es un paradigma para hacer mejor uso de los recursos, principalmente CPU y memoria. Pero, ¿Cómo? Pues bien, mejor uso de la I/O (CPU) y evitar pool de hilos gigantescos (memoria).

Dicho esto, toca entrar más a fondo en qué es Mutiny. Para aquellos que estén acostumbrados a trabajar en Quarkus es posible que se hayan topado con los Unis o los Multis, ya que Mutiny viene integrado de serie en este framework. Aunque, puede ser utilizado en cualquier aplicación Java que presente asincronía.

Es una librería que se define como dirigida a eventos, navegable y no bloqueante.

  • Dirigida a eventos: los eventos están en el centro de su diseño. Es decir, puedes observar eventos, reaccionar ante ellos, y crear elegante y legibles secuencias de procesamiento.
  • Navegable: la API es explícita, con operadores claros según las necesidades.
  • No bloqueante: permite dominar la naturaleza asíncrona de las aplicaciones con I/O no bloqueante. Permite hacer operaciones de forma declarativa, transformar datos, recuperarse de fallos, etc.

A continuación, vamos a pasar a ver algunos ejemplos donde se explican los dos conceptos que hemos dejado aparcados, que son los Uni y los Multi.

Vamos a imaginar que tenemos una base de datos donde persistimos empleados, de los cuales guardamos sólo el identificador (númerico y autoincrementado) y el nombre:

En nuestra capa de acceso a datos, tenemos la siguiente función:

Para este ejemplo, vamos a simular diferentes comportamientos, desde el caso en el se devuelve un empleado de la base de datos, el caso en el que por algún motivo obtenemos un null y, finalmente, el caso en el que no se encuentra al empleado para el identificador dado y se lanza una excepción.

Como devuelve un objeto de tipo Uni de empleado, sabemos que va a ocurrir un solo evento, pero no sabemos si va a ir bien, si va a devolver un null o si va a lanzar algún tipo de excepción. Pero, esto no nos impide escribir una aplicación reactiva controlando todos los efectos de lado, tal que así:

Dependiendo del valor del identificador, el programa va a escribir por consola el nombre del empleado (identificado igual a 0), Employee is null! (identificador igual a 1) o Employee not found (identificador igual o superior a 2).

También, podemos lanzar varias operaciones en paralelo para combinarlas todas una vez finalizadas y hacer algo con dichas operaciones en función de cómo haya ido la ejecución:

Finalmente, podemos encontrarnos con Multi, esto es un stream de eventos. En ese caso, podemos aplicar transformaciones cuando recibamos los eventos o, bien, recolectarlos todos en una lista y trabajar con Uni (Uni<List<?>>).

Y hasta aquí la entrada de hoy. Lo más recomendable es hacer ejemplos por uno mismo y meterse en harina para aprender.

Más ejemplos en este repositorio.

--

--

No responses yet