Queuety
O mecanismo de fluxos de trabalho WordPress.
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activateVersão mais recente 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!',
] );Na prática
Um fluxo de trabalho definido em PHP e o comando do worker que o executa.
Um fluxo de aprovação
O fluxo de trabalho executa uma etapa, aguarda 24 horas e então pausa em wait_for_approval() até que outro processo envie o sinal approval.
O atraso é armazenado no banco de dados, então resiste a reinicializações de workers e implantações; um sinal enviado antecipadamente também é registrado e recebido quando o fluxo de trabalho chega à espera. O cancelamento da execução chama o handler 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=6Reivindicações diretas de MySQL
Cada worker é executado em um processo WP-CLI de longa duração e reivindica tarefas diretamente de MySQL com FOR UPDATE SKIP LOCKED.
Fluxos de trabalho duráveis
Processos com várias etapas e estado persistente, que resistem a timeouts, falhas e novas tentativas de PHP.
Máquinas de estado
Estado orientado a eventos e de longa duração com Queuety::machine(): defina estados e transições, envie eventos e consulte a linha do tempo.
Sinais e aprovações
wait_for_signal(), wait_for_approval() e wait_for_input() pausam um fluxo de trabalho até a chegada de entrada externa.
Níveis de prioridade
Quatro níveis, de Baixa a Urgente. Em uma fila, as tarefas de prioridade mais alta são reivindicadas primeiro.
Limitação de taxa
Limites por handler em uma janela deslizante. Um worker que reivindica uma tarefa limitada por taxa a devolve à fila e aguarda.
Tarefas recorrentes
Agendamento por intervalo e com base em cron. Analisador cron integrado, sem dependências externas.
Etapas paralelas
Execute etapas do fluxo de trabalho simultaneamente e aguarde a conclusão de todas antes de avançar.
Métricas e registros
Registro permanente no banco de dados com taxa de transferência, duração média e p95 e taxa de erros por handler.
Alternativa a WP-Cron
Sem acesso ao shell, um evento cron WordPress executado uma vez por minuto inicia um worker de execução única para a fila padrão.
Middleware
Middleware de tarefas em camadas para limites de taxa, controle de exceções, exclusividade, timeouts e proteção contra sobreposição.
PHP 8.2+
Enums, classes readonly, expressões match, promoção do construtor e atributos PHP.
Por que Queuety
O estado fica em MySQL
As linhas da fila, o estado dos fluxos de trabalho, os registros, os sinais e os blocos transmitidos são armazenados em MySQL, então uma reinicialização do worker não perde nenhum estado de orquestração. Cada limite entre etapas confirma a atualização do estado, a conclusão da tarefa e o enfileiramento da próxima etapa em uma única transação.
Fora das requisições de página
WP-Cron só é acionado em visitas a páginas, e uma chamada de LLM de 60 segundos é encerrada por um timeout de PHP de 30 segundos. Workers Queuety são executados em processos WP-CLI de longa duração e recebem tarefas sem esperar por tráfego.
Controles para execuções de agentes
for_each() com modo de quórum, etapas de aprovação e limites como max_transitions() e max_state_bytes() mantêm execuções longas de agentes dentro de limites definidos.
Utilizável fora do WordPress
O núcleo baseado em banco de dados é executado em qualquer processo PHP que possa abrir o mesmo banco de dados; assim, outro aplicativo pode enviar tarefas, emitir sinais e consultar o status do fluxo de trabalho. Acionadores de ações, a ponte WP-Cron e os comandos WP-CLI ainda precisam de WordPress.
Comparação com
Como Queuety se relaciona com os agendadores e mecanismos de fluxo de trabalho que os desenvolvedores WordPress já conhecem.
| Ferramenta | Ideal para | Diferenças em relação a Queuety |
|---|---|---|
| WP-Cron | Ideal paraIntegrado ao WordPress, não precisa de acesso ao agendador do sistema em hospedagem compartilhada; uma tarefa que perde o horário é executada na próxima visita à página, em vez de ser descartada. | Diferenças em relação a QueuetyWorkers Queuety são executados independentemente do tráfego do site e precisam de um processo wp queuety work de longa duração. A ponte WP-Cron converte eventos recorrentes em agendamentos, mas ainda não executa os callbacks dos hooks, então WP-Cron continua responsável por eles. |
| Action Scheduler | Ideal paraFeito para distribuição em plugins e temas sem exigir acesso ao servidor, processa milhões de pagamentos de assinaturas e webhooks de WooCommerce todos os meses e registra cada ação em uma interface de administração. | Diferenças em relação a QueuetyAction Scheduler executa um hook posteriormente, como um do_action() com atraso. Queuety adiciona fluxos de trabalho com várias etapas cujo estado persiste entre elas, esperas por sinais e aprovações e máquinas de estado. É possível inspecioná-los com comandos WP-CLI, como wp queuety workflow timeline. |
| Temporal | Ideal paraUma plataforma de execução durável: um Histórico de eventos registra cada etapa do fluxo de trabalho, permitindo retomar uma execução do último evento registrado após falhas ou interrupções; o Temporal Cloud é oferecido como alternativa a hospedar o serviço por conta própria. | Diferenças em relação a QueuetyUm serviço Temporal é um servidor Go com um banco de dados, executado junto ao seu aplicativo. Queuety mantém o estado em tabelas MySQL na conexão de banco de dados WordPress e executa workers por meio de WP-CLI. |
Perguntas e respostas
Respostas curtas da documentação do Queuety.
Não para tarefas simples na fila padrão. O plugin executa um worker de execução única por meio de WordPress cron a cada minuto, desde que WordPress cron esteja sendo acionado, e processa uma tarefa por execução. Agendamentos recorrentes, filas personalizadas e menor latência exigem um processo wp queuety work dedicado.
Não. Precisa de mysqli ou pdo_mysql e, por padrão, escolhe mysqli em WordPress. Defina QUEUETY_DB_DRIVER como auto, mysqli ou pdo para especificar um driver.
As tarefas são reivindicadas com SELECT ... FOR UPDATE SKIP LOCKED, compatível com MySQL a partir da versão 8.0 e com MariaDB a partir da versão 10.6. A integração contínua do projeto é executada com MySQL 8.0.
Sim. O núcleo baseado em banco de dados — tarefas, workers, fluxos de trabalho, sinais, máquinas de estado, artefatos, registros, métricas e agendamentos — funciona com uma conexão direta. Pools de workers também precisam das constantes DB_HOST, DB_NAME, DB_USER e DB_PASSWORD. Queuety::on_action(), replace_wp_cron(), a inicialização do plugin e os comandos wp queuety ainda exigem WordPress.
Ainda não. Queuety::replace_wp_cron() converte eventos recorrentes de wp_schedule_event() em agendamentos de Queuety, mas os callbacks dos hooks ainda não são executados; por isso, mantenha WP-Cron para os eventos que precisam ser acionados. Os eventos de wp_schedule_single_event() continuam sob responsabilidade de WP-Cron.
wp queuety work --workers=N cria um pool fixo e reinicia os processos filhos que falham; requer as extensões pcntl e posix. --min-workers e --max-workers executam um pool adaptável, que cresce conforme o acúmulo de tarefas e diminui quando a fila fica mais tranquila.
Instale o plugin, inicie um worker e siga os guias, da sua primeira tarefa aos fluxos de aprovação e às máquinas de estado.