4.2 Estados: Jobs & Colas en Horizon
Este diagrama modela el ciclo de vida y los estados de transición que atraviesa un trabajo asíncrono dentro del motor de colas híbrido de Mañuti, desde su encolamiento en Redis hasta su conclusión exitosa o traslado a la morgue de excepciones en MariaDB.
1. Explicación y Semántica del Diagrama
El modelo expone el principio de aislamiento y resiliencia ante fallos:
Pending: Estado inicial en la memoria RAM de Redis. El trabajo espera un worker libre.Reserved: Un worker toma el trabajo e incrementa el contador de intentos (attempts).Processing: Ejecución activa de la lógica del métodohandle().Completed: El trabajo finaliza exitosamente; se remueve de la memoria de Redis para liberar RAM.Failed (Reintentable): Si ocurre una excepción y el número de intentos es menor al límite (tries = 3), el trabajo regresa a la cola de Redis con un retardo exponencial (Backoff delay).MariaDB: failed_jobs: Al agotarse todos los intentos, el trabajo muere definitivamente en memoria y es transferido a la base de datos relacional para su análisis forense y eventual resurrección manual víaartisan queue:retry.
2. Cómo se Lee este Diagrama
- El nodo con forma de rombo
<<choice>>representa la bifurcación del resultado del trabajo tras ser evaluado por el supervisor de Horizon. - La sub-máquina
FailedJobsTabledelimita las acciones que ocurren fuera de la memoria volátil de Redis.
3. Implementación en el Framework Mañuti
- Configuración:
config/horizon.phpdefinetries = 3ytimeout = 120. - Persistencia: Driver
database-uuidsconfigurado enconfig/queue.php. - Supervisión: Panel visual protegido en
/horizon.
4. Diagrama Mermaid
stateDiagram-v2
%% Definición de estados
state "Redis: Pending" as Pending
state "Redis: Reserved" as Reserved
state "Procesando" as Processing
state "Completed" as Completed
state "Failed (Reintentable)" as FailedTemp
state "MariaDB: failed_jobs" as Morgue
%% Nodo de decisión (Choice)
state c1 <<choice>>
%% Transiciones del ciclo de vida
[*] --> Pending : Dispatch Job
Pending --> Reserved : Worker toma tarea
Reserved --> Processing
%% Evaluación de resultado
Processing --> c1 : Resultado?
c1 --> Completed : Éxito
c1 --> FailedTemp : Error (Intento menor a Max Tries)
c1 --> Morgue : Error (Límite de intentos alcanzado)
%% Reintentos y limpieza
FailedTemp --> Pending : Release (Backoff delay)
Morgue --> Pending : Artisan queue:retry
Morgue --> [*] : Artisan queue:forget