Zeebe + Spring Boot: Modelado de workflows
La orquestación de Zeebe es un tema fascinante en el ámbito de la ingeniería de software y la automatización de procesos empresariales. En este post, exploraremos en detalle qué es Zeebe, cómo funciona su orquestación y cómo puede beneficiar a las organizaciones en la automatización de sus flujos de trabajo.
¿Que es zeebe?
Zeebe es un sistema de orquestación de microservicios distribuido y escalable diseñado para la automatización de procesos empresariales. Fue desarrollado por Camunda, una empresa líder en BPM (Business Process Management) y es parte de su ecosistema de productos para la automatización de flujos de trabajo.
¿Cómo funciona la orquestación de Zeebe?
La orquestación de Zeebe se basa en el modelo de coreografía de eventos y utiliza el lenguaje de notación de modelado de procesos BPMN (Business Process Model and Notation). Permite a las organizaciones describir sus flujos de trabajo empresariales de una manera clara y comprensible, utilizando elementos visuales como diagramas de flujo.
En un entorno de orquestación de Zeebe, los flujos de trabajo se dividen en tareas individuales llamadas “elementos de flujo” o “bpmn elements” en inglés. Estos elementos pueden ser actividades humanas o automatizadas que realizan acciones específicas dentro del proceso. Cada elemento tiene su propio estado y se comunica con otros elementos a través de eventos.
Cuando se inicia una instancia de flujo de trabajo, Zeebe se encarga de asignar y coordinar automáticamente las tareas a los diferentes componentes del sistema distribuido. Esto significa que Zeebe se ocupa de la escalabilidad y la distribución de las tareas, asegurando que se ejecuten correctamente en el orden especificado y que se cumplan las dependencias entre ellas.
La orquestación de Zeebe ofrece una serie de beneficios:
- Escalabilidad y rendimiento: Está diseñado para manejar flujos de trabajo de gran escala y alta carga de trabajo. Puede distribuir las tareas a través de múltiples instancias de componentes de ejecución para garantizar un rendimiento óptimo.
- Flexibilidad: Los diagramas de flujo basados en BPMN permiten una representación visual clara de los flujos de trabajo, lo que facilita la comprensión y la colaboración. Por lo tanto, la flexibilidad en funcionalidades del flujo de trabajo es muy alta y la capacidad de adaptación se realiza con poco esfuerzo.
- Gestión de errores y recuperación: Zeebe ofrece capacidades robustas de gestión de errores y recuperación. Si ocurre algún problema durante la ejecución de una tarea, Zeebe es capaz de manejar el flujo de trabajo de manera adecuada y tomar las acciones necesarias para recuperarse y continuar con el proceso.
- Monitoreo y visibilidad: Zeebe proporciona herramientas para monitorear y rastrear el estado de los flujos de trabajo en tiempo real. Esto permite a las organizaciones tener una visibilidad completa de sus procesos y detectar posibles cuellos de botella o áreas de mejora.
Arquitectura de integración
La arquitectura entre el cliente, los Job Workers y el clúster de Zeebe, junto con Elasticsearch para la explotación de la información, se puede diseñar de la siguiente manera:
- Cliente: El cliente es la aplicación o servicio que interactúa con el clúster de Zeebe para iniciar flujos de trabajo, enviar datos y recibir actualizaciones sobre el estado de los flujos de trabajo. El cliente se comunica con el clúster de Zeebe a través de una API para interactuar con los diferentes componentes del sistema.
- Clúster de Zeebe: El clúster de Zeebe consta de uno o varios nodos, donde cada nodo ejecuta una instancia de Zeebe Broker. Estos nodos trabajan juntos para formar un clúster distribuido y altamente disponible. El clúster de Zeebe se encarga de la orquestación de los flujos de trabajo, el almacenamiento y la administración de los datos relacionados con los flujos, y la coordinación de las tareas y los eventos dentro de los flujos de trabajo.
- Job Workers: Los Job Workers son aplicaciones o servicios que se conectan al clúster de Zeebe y se registran para recibir tareas específicas (llamadas “trabajos”) asignadas por Zeebe. Estos trabajos representan las tareas a realizar dentro de los flujos de trabajo, como procesamiento de datos, llamadas a servicios externos o ejecución de lógica de negocio. Los Job Workers procesan los trabajos y notifican al clúster de Zeebe cuando se completa cada tarea.
- Elasticsearch: Elasticsearch es un motor de búsqueda y análisis distribuido de código abierto que se puede integrar con Zeebe para indexar y almacenar información relacionada con los flujos de trabajo. Los Job Workers pueden utilizar Elasticsearch para indexar datos y resultados relevantes generados durante la ejecución de los flujos de trabajo. Esto permite realizar búsquedas, consultas y análisis rápidos y eficientes sobre los datos almacenados.

Pasos para la integración de zeebe en un proyecto spring boot
Definición de pasos a realizar para integrar el cliente de zeebe en un proyecto spring boot con java:
Modelado del flujo de trabajo o workflow con la herramienta zeebe modeler.
En el siguiente enlace puedes encontrar documentación sobre como empezar tus primeros diseños con zeebe modeler.
https://docs.camunda.io/docs/0.26/components/modeler/zeebe-modeler/model-your-first-diagram/

Modelado del flujo de trabajo o workflow con la herramienta zeebe modeler.
- Crea un nuevo proyecto Spring Boot en tu IDE de preferencia.
- Agrega las dependencias necesarias para Zeebe y Spring Boot en tu archivo de configuración. Si estás utilizando Maven, agrega las siguientes dependencias en tu archivo
:1pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 <dependencies>
<!-- Dependencias de Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Dependencias de Zeebe -->
<dependency>
<groupId>io.camunda</groupId>
<artifactId>zeebe-client-java</artifactId>
<version>1.3.0</version>
</dependency>
</dependencies>
- Crea una clase que represente el controlador de tu flujo de trabajo. Esta clase se encargará de ejecutar las tareas asociadas al flujo de trabajo.
- Asegúrate de agregar la anotación
para que Spring pueda escanear y administrar esta clase. La anotación1<strong>@Component</strong>habilita el cliente de Zeebe en Spring Boot.1<strong>@EnableZeebeClient</strong>
- La anotación
se utiliza para marcar un método como un worker de Zeebe. En el ejemplo, el método1<strong>@ZeebeWorker</strong>se ejecutará cada vez que se asigne una tarea de tipo “my-task” en Zeebe.1handleMyTask
- El id de la tarea (ej: my-task) definida en la anotacion @ZeebeWorker debe de coincidir con el id de la tarea modelada en el workflow
1
2
3
4
5
6
7
8
9
10
11
12
13 import io.camunda.zeebe.spring.client.EnableZeebeClient;
import io.camunda.zeebe.spring.client.annotation.ZeebeWorker;
import org.springframework.stereotype.Component;
@Component
<strong>@EnableZeebeClient</strong>
public class MyWorkflowController {
<strong>@ZeebeWorker</strong>(type = "<strong>my-task</strong>")
public void handleMyTask(String task) {
// Lógica del trabajo
}
}
- Ejecuta tu aplicación Spring Boot. La configuración proporcionada en el paso 1 se encargará de establecer la conexión con el servidor de Zeebe.
- Zeebe registrará los workers definidos en el controlador del flujo de trabajo y esperará a que se asignen tareas.
- Utiliza el cliente de Zeebe para iniciar instancias del flujo de trabajo y enviar tareas.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import io.camunda.zeebe.client.ZeebeClient;
import org.springframework.stereotype.Service;
@Service
public class MyWorkflowService {
private final ZeebeClient zeebeClient;
public MyWorkflowService(ZeebeClient zeebeClient) {
this.zeebeClient = zeebeClient;
}
public void startWorkflow() {
// Iniciar una instancia del flujo de trabajo
zeebeClient.newCreateInstanceCommand()
.bpmnProcessId("my-workflow")
.latestVersion()
.variables("{"key": "value"}")
.send()
.join();
}
}
Monitorización de la ejecución
La monitorización de flujos de trabajo con un clúster de Zeebe se refiere a la capacidad de supervisar y recopilar información sobre el estado y el rendimiento de los flujos de trabajo en ejecución en el clúster de Zeebe.
La monitorización de flujos de trabajo con Zeebe implica diferentes aspectos, entre ellos:
- Métricas de rendimiento: Zeebe proporciona métricas específicas que permiten evaluar el rendimiento del clúster y de los flujos de trabajo. Estas métricas incluyen información sobre el número de instancias en ejecución, el tiempo de respuesta promedio, la tasa de completado de tareas, el tiempo de espera, entre otros.
- Estado de las instancias: Es importante obtener información sobre el estado de las instancias individuales de los flujos de trabajo. Esto implica conocer en qué etapa se encuentra cada instancia, qué tareas se han completado y cuáles están pendientes, así como cualquier error o excepción que se haya producido durante la ejecución.
- Registro de eventos: Zeebe registra eventos relacionados con la ejecución de los flujos de trabajo, como la creación de instancias, la finalización de tareas, el inicio y la finalización de los flujos, entre otros.

Espero que te haya aportado lo que buscas!!
