resources/views/pages/frontend/docs/uml-estados-jobs-horizon.md
Última modificación: 24 Oct, 2026

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étodo handle().
  • 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ía artisan 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 FailedJobsTable delimita las acciones que ocurren fuera de la memoria volátil de Redis.

3. Implementación en el Framework Mañuti

  • Configuración: config/horizon.php define tries = 3 y timeout = 120.
  • Persistencia: Driver database-uuids configurado en config/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

Enlaces Relacionados

Edita este documento en >> uml-estados-jobs-horizon.md
← Volver a la Landing Page