跳转到正文

队列管理

Queuety 支持多个命名队列。每个工作进程处理一个队列或按顺序排列的队列列表(参见 工作进程),并且可以单独暂停和恢复各个队列。

命名队列

将作业分发到指定队列:

PHP
use Queuety\Queuety;

Queuety::dispatch( 'send_email', $payload )->on_queue( 'emails' );
Queuety::dispatch( 'process_image', $payload )->on_queue( 'media' );
Queuety::dispatch( 'sync_data', $payload )->on_queue( 'sync' );

为每个队列运行工作进程:

命令行
wp queuety work --queue=emails
wp queuety work --queue=media
wp queuety work --queue=sync

默认队列是 default。如果未指定队列,作业就会进入该队列。

暂停和恢复

暂停队列可阻止工作进程领取新作业。正在处理的作业会继续完成,但不会领取新作业。

PHP
Queuety::pause( 'emails' );
Queuety::resume( 'emails' );

检查队列是否已暂停:

PHP
if ( Queuety::is_paused( 'emails' ) ) {
    // Queue is paused
}

通过 CLI:

命令行
wp queuety pause emails
wp queuety resume emails

在部署或维护时段,这很有用;你可以暂时停止处理作业,而无需终止工作进程。

队列统计数据

按状态获取作业数量:

PHP
$stats = Queuety::stats(); // all queues
$stats = Queuety::stats( 'emails' ); // specific queue

// Returns: ['pending' => 12, 'processing' => 3, 'completed' => 150, 'failed' => 2, 'buried' => 1]

通过 CLI:

命令行
wp queuety status
wp queuety status --queue=emails

失败作业

列出所有失败作业(重试次数用尽后失败):

PHP
$buried = Queuety::buried(); // all queues
$buried = Queuety::buried( 'emails' ); // specific queue

重试这些作业:

PHP
Queuety::retry( $job_id );       // retry a specific job
Queuety::retry_buried();         // retry all buried jobs

清除已完成作业

删除较早完成的作业,以保持数据库整洁:

PHP
$count = Queuety::purge();     // uses QUEUETY_RETENTION_DAYS (default: 7)
$count = Queuety::purge( 30 ); // purge jobs older than 30 days

通过 CLI:

命令行
wp queuety purge
wp queuety purge --older-than=30