Queuety
El motor de flujos de trabajo WordPress.
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activateÚltima versión v0.22.0 GPL-2.0-or-later WordPress 6.4+, PHP 8.2+
use Queuety\Queuety;
Queuety::register( 'send_email', SendEmailHandler::class );
Queuety::dispatch( 'send_email', [
'to' => 'user@example.com',
'subject' => 'Welcome',
'body' => 'Hello from Queuety!',
] );En la práctica
Un flujo de trabajo definido en PHP y el comando del trabajador que lo ejecuta.
Un flujo de trabajo de aprobación
El flujo de trabajo ejecuta un paso, espera 24 horas y luego se pausa en wait_for_approval() hasta que otro proceso envía la señal approval.
El retraso se guarda en la base de datos, por lo que se conserva tras reiniciar los trabajadores e implementar cambios; además, una señal enviada antes de tiempo queda registrada y se procesa cuando el flujo de trabajo llega a la espera. Al cancelar la ejecución, se llama al controlador on_cancel().
$workflow_id = Queuety::workflow( 'approval_flow' )
->then( SubmitRequestHandler::class )
->delay( hours: 24 )
->wait_for_approval()
->then( ProcessApprovalHandler::class )
->on_cancel( CleanupHandler::class )
->dispatch( [ 'request_id' => 99 ] );
// Later, from another process:
Queuety::signal( $workflow_id, 'approval', [ 'approved_by' => 'admin@example.com' ] );# Single worker on default queue
wp queuety work
# Process a specific queue
wp queuety work --queue=emails
# Process multiple queues in priority order
wp queuety work --queue=critical,default,low
# One-shot mode
wp queuety work --once
# Multi-worker mode
wp queuety work --workers=4
# Adaptive worker pool
wp queuety work --queue=providers --min-workers=2 --max-workers=6Reclamación directa de MySQL
Cada trabajador se ejecuta en un proceso WP-CLI de larga duración y reclama tareas directamente desde MySQL con FOR UPDATE SKIP LOCKED.
Flujos de trabajo duraderos
Procesos de varios pasos con estado persistente que sobreviven a los tiempos de espera PHP, los bloqueos y los reintentos.
Máquinas de estados
Estado de larga duración basado en eventos con Queuety::machine(): defina estados y transiciones, envíe eventos y consulte la cronología.
Señales y aprobaciones
wait_for_signal(), wait_for_approval() y wait_for_input() pausan un flujo de trabajo hasta que llega una entrada externa.
Niveles de prioridad
Cuatro niveles, de baja a urgente. Dentro de una cola, las tareas de mayor prioridad se reclaman primero.
Limitación de tasa
Límites por controlador en una ventana móvil. Si un trabajador reclama una tarea con límite de velocidad, la devuelve y espera.
Tareas recurrentes
Programación basada en intervalos y cron. Analizador cron integrado, sin dependencias externas.
Pasos paralelos
Ejecute pasos del flujo de trabajo simultáneamente y espere a que todos terminen antes de avanzar.
Métricas y registros
Registro permanente en la base de datos con el rendimiento, la duración media y p95, y la tasa de errores de cada controlador.
Alternativa para WP-Cron
Sin acceso al shell, un evento WordPress cron que se ejecuta una vez por minuto inicia un trabajador de una sola ejecución para la cola predeterminada.
Middleware
Middleware para tareas al estilo onion que gestiona límites de velocidad, control de excepciones, unicidad, tiempos de espera y protección contra ejecuciones simultáneas.
PHP 8.2+
Enumeraciones, clases de solo lectura, expresiones match, promoción de constructores y atributos PHP.
Por qué Queuety
El estado reside en MySQL
Las filas de cola, el estado de los flujos de trabajo, los registros, las señales y los fragmentos transmitidos se guardan en MySQL, por lo que reiniciar un trabajador no hace perder ningún estado de orquestación. Cada límite entre pasos confirma en una sola transacción la actualización del estado, la finalización de la tarea y la siguiente tarea encolada.
Fuera de la solicitud de página
WP-Cron solo se ejecuta al visitar páginas, y una llamada a LLM de 60 segundos se interrumpe por el tiempo de espera de PHP de 30 segundos. Los trabajadores Queuety se ejecutan en un proceso WP-CLI de larga duración y recogen tareas sin esperar a que haya tráfico.
Límites de seguridad para las ejecuciones de agentes
for_each() con un modo de quórum, pasos de aprobación y límites como max_transitions() y max_state_bytes() mantienen las ejecuciones prolongadas de agentes dentro de límites definidos.
Se puede usar fuera de WordPress
El núcleo respaldado por la base de datos funciona en cualquier proceso PHP que pueda conectarse a la misma base de datos, así que otra aplicación puede enviar tareas, enviar señales y consultar el estado de los flujos de trabajo. Los activadores de acciones, el puente WP-Cron y los comandos WP-CLI siguen necesitando WordPress.
Comparación con
Cómo se relaciona Queuety con los programadores y motores de flujos de trabajo que los desarrolladores de WordPress ya conocen.
| Herramienta | Ideal para | Diferencia con Queuety |
|---|---|---|
| WP-Cron | Ideal paraIntegrado en WordPress, no necesita acceso al programador del sistema en alojamiento compartido; si una tarea no se ejecuta a la hora prevista, se ejecuta en la siguiente carga de página en vez de descartarse. | Diferencia con QueuetyQueuety workers se ejecuta de forma independiente del tráfico del sitio y necesita un proceso wp queuety work de larga duración. Su puente WP-Cron convierte los eventos recurrentes en programaciones, pero aún no ejecuta sus callbacks de hook, así que WP-Cron sigue encargándose de ellos. |
| Action Scheduler | Ideal paraDiseñado para distribuirse dentro de complementos y temas sin necesidad de acceso al servidor, procesa cada mes millones de pagos de Suscripciones y webhooks de WooCommerce, y registra cada acción en una interfaz de administración. | Diferencia con QueuetyAction Scheduler ejecuta una función de enlace más adelante, como un do_action() retrasado. Queuety añade flujos de trabajo de varios pasos cuyo estado persiste entre pasos, esperas de señales y aprobaciones, y máquinas de estados; se inspeccionan mediante comandos WP-CLI como wp queuety workflow timeline. |
| Temporal | Ideal paraUna plataforma de ejecución duradera: un historial de eventos registra cada paso de un flujo de trabajo, de modo que la ejecución se reanuda desde el último evento registrado tras bloqueos o interrupciones; también se ofrece Temporal Cloud como alternativa a alojar el servicio por cuenta propia. | Diferencia con QueuetyUn servicio de Temporal es un servidor Go y una base de datos que se ejecutan junto a la aplicación. Queuety guarda su estado en tablas MySQL mediante la conexión a la base de datos WordPress y ejecuta trabajadores con WP-CLI. |
Preguntas y respuestas
Respuestas breves de la documentación de Queuety.
No para tareas sencillas en la cola predeterminada. El plugin ejecuta un worker de una sola ejecución mediante WordPress cron cada minuto, siempre que WordPress cron se active, y procesa un trabajo por ejecución. Las programaciones recurrentes, las colas personalizadas y una latencia menor requieren un proceso wp queuety work dedicado.
No. Necesita mysqli o pdo_mysql y, de forma predeterminada, elige mysqli en WordPress. Defina QUEUETY_DB_DRIVER como auto, mysqli o pdo para forzar un controlador.
Las tareas se reclaman con SELECT ... FOR UPDATE SKIP LOCKED, que MySQL admite desde la versión 8.0 y MariaDB desde la 10.6. La CI del proyecto se ejecuta con MySQL 8.0.
Sí. El núcleo respaldado por la base de datos —tareas, trabajadores, flujos de trabajo, señales, máquinas de estados, artefactos, registros, métricas y programaciones— funciona con una conexión directa. Los grupos de trabajadores también necesitan las constantes DB_HOST, DB_NAME, DB_USER y DB_PASSWORD. Queuety::on_action(), replace_wp_cron(), el inicio del complemento y los comandos wp queuety siguen requiriendo WordPress.
Todavía no. Queuety::replace_wp_cron() convierte los eventos recurrentes de wp_schedule_event() en programaciones de Queuety, pero sus funciones de enlace todavía no se ejecutan; siga usando WP-Cron para los eventos que deban activarse. Los eventos de wp_schedule_single_event() siguen a cargo de WP-Cron.
wp queuety work --workers=N crea un grupo fijo y reinicia los procesos secundarios que se bloquean; requiere las extensiones pcntl y posix. --min-workers y --max-workers ejecutan un grupo adaptable que crece cuando aumenta la acumulación de tareas y se reduce cuando disminuye la actividad.
Instale el complemento, inicie un trabajador y siga las guías, desde su primera tarea hasta los flujos de trabajo de aprobación y las máquinas de estados.