Advanced Queue

Proporciona una API de Queue mejorada para Drupal con estados de trabajos, reintentos, procesamiento diferido y listados de trabajos basados en Views.

advancedqueue
5,654 sites
66
drupal.org

Install

Drupal 11, 10 v8.x-1.5
composer require 'drupal/advancedqueue:8.x-1.5'
Drupal 9 v8.x-1.3
composer require 'drupal/advancedqueue:8.x-1.3'

Overview

Advanced Queue proporciona una API de cola mejorada en comparación con la API Queue del núcleo de Drupal. Introduce entidades de configuración (Queues) con almacenamiento backend conectable y un sistema de plugins para definir tipos de trabajos.

Cada trabajo pasa por estados definidos (en cola, procesando, éxito, fallo) y almacena su resultado (estado, mensaje, tiempo de procesamiento) después del procesamiento. El módulo soporta reintentos automáticos con retrasos configurables, ejecución de trabajos diferidos/programados, creación masiva de trabajos y detección de trabajos duplicados.

Las colas pueden procesarse mediante cron o a través de un daemon (comando Drush). El módulo proporciona una interfaz de administración completa con integración de Views para monitorear y gestionar trabajos, incluyendo operaciones masivas para eliminar, reintentar y liberar.

Features

  • Seguimiento de estado de trabajos con cuatro estados: en cola, procesando, éxito y fallo
  • Resultados de trabajos almacenados incluyendo estado, mensaje y tiempo de procesamiento
  • Reintentos configurables por tipo de trabajo con retrasos personalizables
  • Procesamiento de trabajos diferidos/programados - programa trabajos para ejecutar en el futuro
  • Sistema de backend conectable para almacenamiento de colas (incluye backend de base de datos)
  • Sistema de tipos de trabajo conectable para definir procesadores de trabajos personalizados
  • Detección y manejo de trabajos duplicados mediante fingerprinting
  • API de creación masiva de trabajos para encolar eficientemente
  • Procesamiento mediante cron o comando daemon Drush con manejo de señales (SIGTERM/SIGINT)
  • Listados de trabajos basados en Views con filtrado, ordenación y operaciones masivas
  • Limpieza automática de trabajos completados basada en umbrales de cantidad o antigüedad
  • Interfaz de administración para crear y gestionar entidades de configuración de colas

Use Cases

Procesamiento de Correos en Segundo Plano

Crear un plugin de tipo de trabajo para enviar correos electrónicos. Cuando se necesite enviar un correo, crear un Job con los datos del correo como payload y encolarlo. El procesador de trabajos enviará correos en segundo plano, con reintentos automáticos si SMTP falla.

Publicación de Contenido Programada

Crear trabajos con un tiempo de disponibilidad futuro para programar operaciones de contenido. Usar el parámetro delay al encolar para establecer cuándo debe procesarse el trabajo.

Procesamiento de Datos de Alto Volumen

Usar creación masiva de trabajos (enqueueJobs) para encolar eficientemente miles de elementos para procesamiento. Configurar procesamiento daemon con tiempo ilimitado para procesamiento continuo.

Renovaciones de Suscripción

Similar a Commerce Recurring, crear un tipo de trabajo para operaciones recurrentes. Configurar reintentos con retrasos para manejar fallos de pago temporales de manera elegante.

Operaciones de Importación/Exportación

Encolar operaciones grandes de importación o exportación como trabajos en segundo plano. Usar el límite de tiempo de procesamiento para prevenir timeouts y permitir procesamiento a través de múltiples ejecuciones de cron.

Operaciones con API de Límite de Tasa

Encolar operaciones que llaman a APIs externas con límite de tasa. Configurar retrasos de reintento para respetar los límites de tasa cuando las operaciones fallan debido a throttling.

Tips

  • Use diferentes colas para separar trabajos por prioridad, método de procesamiento o almacenamiento de backend
  • Establezca un lease_time apropiado basado en su trabajo de mayor duración para prevenir liberación prematura
  • Use procesamiento daemon para trabajos críticos en tiempo que no deberían esperar a cron
  • Configure umbrales de limpieza para prevenir hinchazón de base de datos por trabajos completados
  • Implemente el método handleDuplicateJobs() en su tipo de trabajo para personalizar el manejo de duplicados (fusionar, reemplazar, descartar)
  • Use el evento POST_PROCESS para enviar notificaciones o disparar acciones de seguimiento después de completar el trabajo
  • Para sitios en producción, considere ejecutar múltiples procesos daemon Drush para procesamiento paralelo

Technical Details

Admin Pages 4
Colas /admin/config/system/queues

Página principal de administración que lista todas las entidades de configuración de colas. Muestra cada cola con su etiqueta, recuentos de trabajos por estado (En cola, Procesando, Éxito, Fallo) y enlaces de operaciones (Editar, Eliminar, Listar trabajos). Proporciona una visión general de todas las colas y sus estadísticas actuales de trabajos.

Añadir cola /admin/config/system/queues/add

Formulario para crear una nueva entidad de configuración de cola con selección de backend y opciones de procesamiento.

Editar cola /admin/config/system/queues/manage/{queue_id}

Formulario para editar una configuración de cola existente. El backend no puede cambiarse después de la creación.

Trabajos /admin/config/system/queues/{queue_id}/jobs

Listado basado en Views de todos los trabajos en una cola específica. Muestra detalles del trabajo incluyendo ID, contador de reintentos, estado (con icono), tipo, payload (JSON), fecha de disponibilidad, fecha de procesamiento, mensaje y operaciones. Soporta filtrado por estado y tipo de trabajo, ordenación, paginación (50 elementos por página) y operaciones masivas.

Permissions 1
Administrar colas

Permite a los usuarios crear, editar, eliminar colas y gestionar trabajos. Este es un permiso de acceso restringido que solo debería otorgarse a administradores de confianza.

Hooks 2
hook_advancedqueue_backend_info_alter

Permite a los módulos alterar las definiciones de plugins de backend

hook_advancedqueue_job_type_info_alter

Permite a los módulos alterar las definiciones de plugins de tipo de trabajo

Drush Commands 2
advancedqueue:queue:process <queue_id>

Procesa trabajos de una cola específica. El comando procesará trabajos hasta que se alcance el tiempo límite o la cola esté vacía (si stop_when_empty está habilitado). Soporta apagado graceful mediante señales SIGTERM y SIGINT.

advancedqueue:queue:list

Lista todas las colas configuradas con sus recuentos de trabajos por estado.

Troubleshooting 4
Trabajos atascados en estado 'procesando'

Esto ocurre cuando un worker se bloquea o excede el tiempo límite. Los trabajos se liberarán automáticamente después de que expire el tiempo de reserva (por defecto 300 segundos). También puede liberar trabajos manualmente a través de la interfaz de administración u operaciones masivas.

La cola no procesa durante cron

Verifique que el procesador de la cola esté configurado como 'Cron' (no Daemon). Compruebe que cron esté ejecutándose y que el processing_time sea apropiado para su intervalo de cron.

Se crean trabajos duplicados

Asegúrese de que su plugin de tipo de trabajo tenga allow_duplicates configurado como FALSE. El backend debe implementar SupportsDetectingDuplicateJobsInterface (el backend de base de datos lo hace). Sobrescriba createJobFingerprint() en su tipo de trabajo si la lógica de fingerprint predeterminada no se adapta a sus necesidades.

Los trabajos fallan inmediatamente sin reintento

Los reintentos solo ocurren cuando el método process() del tipo de trabajo devuelve JobResult::failure(). Las excepciones durante el procesamiento causan fallo inmediato sin reintento. Configure max_retries en la anotación/atributo de su plugin de tipo de trabajo.

Security Notes 3
  • El permiso 'administer advancedqueue' está marcado como acceso restringido y solo debería otorgarse a administradores de confianza
  • Los payloads de trabajos se almacenan como blobs JSON - evite almacenar datos sensibles directamente en los payloads
  • Valide y sanee cualquier dato en los payloads de trabajos antes de procesar para prevenir ataques de inyección