Ir al contenido principal
Laravel, shipping fast.

Un worker de cola es un proceso corriendo en un sitio que no estás mirando, que es exactamente el punto de usar uno y exactamente por qué necesita la instrumentación que el ciclo petición/respuesta obtiene gratis. La flota envuelve la ejecución de jobs en su propio middleware para esto.

Cada job que se apunta —declarando un método middleware()— obtiene una fila escrita antes de correr y actualizada después: estado, duración en milisegundos, llamadas salientes hechas durante el intento y el mensaje de error si falló. Eso es un rastro de auditoría por ejecución para trabajo que nadie ve ocurrir en tiempo real.

Las tablas de jobs fallidos y lotes reciben el mismo trato a nivel de flota: un panel interno leyendo job_batches para porcentajes de progreso y failed_jobs para lo que necesita una decisión. Ninguna vista sustituye a la otra. El middleware responde «qué pasó en este intento». El panel responde «cuál es el estado de todo lo que está en vuelo ahora mismo». Una cola que no puedes ver es una cola de la que te enteras por un ticket de soporte.

Repaso

Decisiones de despacho

  • [X] Encola el trabajo cuyo resultado quien llama no necesita de inmediato; mantén síncrono todo aquello de lo que dependa el cuerpo de la respuesta
  • [X] Cifra las cargas de job que llevan credenciales con ShouldBeEncrypted

Hacer seguros los reintentos

  • [X] Trata cada job como al menos una vez: se ejecutará dos veces tarde o temprano
  • [X] Usa una reclamación atómica en caché para colapsar entregas duplicadas de un job cuyo efecto no es idempotente por naturaleza
  • [X] Elige $tries y backoff() deliberadamente: reintentos rápidos para fallos transitorios, lentos para caídas reales
  • [X] Usa retryUntil() en lugar de $tries para trabajo de sondeo, y fail() explícito para estados terminales

Cuando aun así falla

  • [X] Dale a failed() un trabajo real: cambia el estado, avisa a una persona, nunca lo dejes vacío
  • [X] Trata failed_jobs como una cola de decisiones humanas, no como un sitio donde los jobs van a olvidarse
  • [X] Encadena el trabajo de varios pasos y dale a la cadena un único manejador terminal idempotente alcanzable desde ->catch() y desde el failed() del job exterior
  • [X] Añade un vigilante para el trabajo que puede atascarse sin lanzar nunca

Un job en segundo plano es una promesa que hiciste de terminar un trabajo sin que nadie mire. Cúmplela como cumplirías cualquier promesa que nadie comprueba: da por hecho que te van a examinar igualmente.