The Daily Commit · Edición de sección Portada PHP AI Dev EN DE FR ES

The Php Times

Lecturas — Ecosistema

Laravel 13.25: Pausa global de colas para despliegues seguros


Laravel 13.25 introduce un mecanismo de pausa global para colas que impide que los workers reserven nuevos jobs durante despliegues.

LARAVEL NEWS, 13 de agosto de 2026 seleccionado por Heiko

Los comandos queue:pause --all y queue:resume --all, o los métodos PHP Queue::pauseAll() y Queue::resumeAll(), están disponibles. Los workers permanecen activos pero duermen en lugar de procesar; los jobs en vuelo se completan y los nuevos jobs se ponen en cola.

Durante la mayoría de despliegues existe una ventana donde el código en disco ha cambiado pero los workers aún ejecutan la versión antigua. Los workers que reservan jobs en esta ventana deserializan cargas útiles del código antiguo y las ejecutan con el código nuevo, ocasionalmente causando fallos cuando las clases de job se renombran o las firmas de constructores cambian.

Laravel 13.25 aborda esto con un interruptor de pausa global que detiene a todos los workers en todas las conexiones de reservar nuevos jobs sin afectar el tráfico HTTP. Los tradicionales workarounds – modo mantenimiento (que detiene más que solo las colas) y queue:restart (una solicitud, no una garantía) – ahora se complementan con esta solución dedicada.

La sintaxis de comandos es sencilla: php artisan queue:pause --all y php artisan queue:resume --all. El argumento queue se vuelve opcional; sin --all, los comandos funcionan como antes con un par connection:queue. La misma funcionalidad está disponible a través de la facade Queue para scripts de despliegue basados en PHP o controladores de administración usando Queue::pauseAll() y Queue::resumeAll().

Pausar detiene a los workers de reservar nuevos jobs pero mantiene vivos los procesos workers y en bucle; simplemente duermen en lugar de procesar. Los jobs ya procesando cuando se invoca la pausa se ejecutan hasta completarse. Los productores no se ven afectados: SomeJob::dispatch() continúa escribiendo en Redis o la base de datos, y esos jobs permanecen en cola hasta la reanudación.

La implementación usa una única clave de caché, illuminate:queues:paused, establecida con forever(). Los workers ya verifican caché una vez por bucle para reinicio y señales de pausa por cola; la clave global se obtiene en la misma llamada many(), sin añadir round trips adicionales. QueueManager::isPaused() y getPausedQueues() reportan una cola como pausada cuando la clave global o su clave individual está establecida.

Los mecanismos de pausa global e individual son independientes. Si una cola fue pausada individualmente antes del despliegue, resumeAll() la deja pausada – una decisión de diseño deliberada. Alguien puede haber estacionado la cola intencionalmente para investigar un job defectuoso, y un despliegue automatizado no debe deshacer silenciosamente acciones manuales. Limpiar pausas individuales aún requiere queue:resume connection:queue.

Dos nuevos eventos acompañan los eventos existentes por cola QueuePaused y QueueResumed: QueuesPaused y QueuesResumed se disparan cuando ocurre pausa o reanudación global, permitiendo que las aplicaciones registren o monitoreen estas acciones de despliegue.

La característica fue contribuida por Jack Bayliss en la solicitud de cambio #61126.

Leer la fuente original (en inglés) ↗

Valora este artículo: 0

Tribuna de lectores

Aún no hay aportaciones — abre el debate.

← Ecosistema — Page B1

"All the Code That's Fit to Ship" · The Daily Commit · Edición de pantalla · Información legal · Política de privacidad