Async Worker
Command: yo codedesignplus:microservice asyncWorker
Este comando se utiliza para crear un proyecto Async Worker dentro de un microservicio existente. Los Async Workers son procesos que ejecutan tareas en segundo plano, de forma asíncrona, mejorando el rendimiento y la capacidad de respuesta del microservicio. Este comando facilita la generación de la estructura básica para definir un worker en tu microservicio.
Prerrequisitos
- Instalar Node.js y npm instalados.
- Instalar Yeoman (
npm install -g yo
). - Instalar el generador
codedesignplus:microservice
. - Tener un microservicio existente creado con:
- CRUD:
codedesignplus:microservice
- Custom:
codedesignplus:microservice
.
- CRUD:
Conceptos Clave
- Async Worker (Trabajador Asíncrono): Es un proceso que se ejecuta en segundo plano, desacoplando la ejecución de tareas de la petición inicial. Esto permite que el microservicio responda rápidamente mientras las tareas más complejas se ejecutan de forma asíncrona.
- Tareas en Segundo Plano: Son operaciones que no requieren una respuesta inmediata al cliente, como el envío de correos electrónicos, procesamiento de archivos, actualización de datos, etc.
- Cola de Mensajes: Los Async Workers generalmente trabajan en conjunto con una cola de mensajes donde las tareas se encolan y el worker las consume de forma ordenada.
- Desacoplamiento: Los Async Workers permiten desacoplar el procesamiento de las peticiones de la lógica de negocio, mejorando la escalabilidad y la mantenibilidad del microservicio.
Sintaxis del Comando
El comando yo codedesignplus:microservice asyncWorker
tiene la siguiente sintaxis:
yo codedesignplus:microservice asyncWorker \ --organization "<organization_name>" \ --microservice "<microservice_name>" \ --consumer-name "<consumer_name>" \ --consumer-aggregate "<aggregate_name>" \ --consumer-action "<consumer_action>" \ --consumer-microservice "<consumer_microservice>"
yo codedesignplus:microservice asyncWorker ` --organization "<organization_name>" ` --microservice "<microservice_name>" ` --consumer-name "<consumer_name>" ` --consumer-aggregate "<aggregate_name>" ` --consumer-action "<consumer_action>" ` --consumer-microservice "<consumer_microservice>"
--organization
- Tipo:
string
- Obligatorio: Sí
- Descripción: El nombre de la organización a la que pertenece el microservicio.
--microservice
- Tipo:
string
- Obligatorio: Sí
- Descripción: El nombre del microservicio donde se creará el proyecto async worker.
--consumer-name
- Tipo:
string
- Obligatorio: Sí
- Descripción: El nombre del evento que se consumirá.
--consumer-aggregate
- Tipo:
string
- Obligatorio: Sí
- Descripción: El nombre del agregado al que pertenece el evento que se consumirá.
--consumer-action
- Tipo:
string
- Obligatorio: Sí
- Descripción: La acción que realizará el consumer en respuesta al evento.
--consumer-microservice
- Tipo:
string
- Obligatorio: No
- Descripción: El nombre del microservicio que publica el evento que se consumirá.
Ejemplos de Uso
Este ejemplo crea un worker para el microservicio notifications
de la organización acme
, que consumirá los eventos de tipo orderCreated
del agregado order
para el envio de notificaciones.
yo codedesignplus:microservice asyncWorker \ --organization "Acme" \ --microservice "Notifications" \ --consumer-name "OrderCreated" \ --consumer-aggregate "Order" \ --consumer-action "send-notification" \ --consumer-microservice "ms-order"
yo codedesignplus:microservice asyncWorker ` --organization "Acme" ` --microservice "Notifications" ` --consumer-name "OrderCreated" ` --consumer-aggregate "Order" ` --consumer-action "send-notification" ` --consumer-microservice "ms-order"
Salida del comando en consola
Tras ejecutar el comando, se generará la estructura base para el Async Worker en el microservicio notifications
, con la siguiente salida en consola:

Directorios y Archivos Generados
Si exploramos el microservicio con VS Code, veremos la estructura de directorios y archivos generados para el nuevo Async Worker:

Resultados de la Ejecución
La ejecución de este comando con los parámetros proporcionados generará la estructura base para un Async Worker en el microservicio especificado. Veamos los resultados de la ejecución del comando:
--organization
Flag: --organization "Acme"
-
Este parámetro establece el nombre de la organización, que se refleja en los namespaces de los archivos generados para el proyecto Async Worker.
--microservice
Flag: --microservice "Notifications"
- Este parámetro establece el nombre del microservicio en el que se creará el Async Worker, reflejándose en los namespaces y ubicaciones de los archivos.

--consumer-name
Flag: --consumer-name "OrderCreated"
-
Este parámetro define el nombre del mensaje o evento que consumirá el worker, reflejándose en la lógica de consumo de mensajes.
--consumer-aggregate
Flag: --consumer-aggregate "Order"
-
Este parámetro define el agregado asociado al mensaje o evento que consumirá el worker, reflejándose en la lógica de consumo de mensajes.
--consumer-action
Flag: --consumer-action "send-notification"
-
Este parámetro define la acción del mensaje o evento que consumirá el worker, reflejándose en la lógica de consumo de mensajes.
--consumer-microservice
Flag: --consumer-microservice "ms-order"
-
Este parámetro define el microservicio que publica el mensaje. En este caso, el microservicio
ms-order
publica el eventoorderCreated
.
Consideraciones Adicionales
- Asegúrate de tener un microservicio existente antes de utilizar este comando.
- Los Async Workers deben encargarse de ejecutar tareas en segundo plano, sin bloquear la respuesta del microservicio.
- La configuración de la cola de mensajes debe estar previamente establecida para que el worker pueda consumir los mensajes.
- Se recomienda utilizar un mensaje de cola diferente por cada action (consumer-action).
Enlaces Relacionados
- Documentación del arquetipo
CodeDesignPlus.Net.Microservice
- Documentación del SDK
CodeDesignPlus.Net.SDK
- RabbitMQ
Conclusión
El comando yo codedesignplus:microservice asyncWorker
facilita la creación de proyectos de Async Worker en tu microservicio, permitiendo una mejor gestión de las tareas en segundo plano. Utiliza este comando para desacoplar la ejecución de tareas, mejorando la escalabilidad y capacidad de respuesta de tu microservicio.
¡Ahora el ejemplo es más claro y muestra mejor cómo usar el comando en diferentes contextos!