shopfans / yii-queue

支持数据库、Redis、RabbitMQ、Beanstalk、SQS 和 Gearman 的 Yii 队列扩展

安装: 245

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 13

分支: 0

开放问题: 0

类型:yii-extension

dev-master / 2.x-dev 2023-07-06 12:59 UTC

This package is auto-updated.

Last update: 2024-09-06 16:03:28 UTC


README

Yii2 队列扩展


一个用于通过队列异步运行任务的扩展。

它支持基于 DBRedisRabbitMQAMQPBeanstalkActiveMQGearman 的队列。

文档位于 docs/guide/README.md

Latest Stable Version Total Downloads Build Status

安装

安装此扩展的最佳方式是通过 composer

php composer.phar require --prefer-dist yiisoft/yii2-queue

基本用法

每个发送到队列的任务都应该定义为独立的类。例如,如果您需要下载并保存文件,类可能如下所示

class DownloadJob extends BaseObject implements \yii\queue\JobInterface
{
    public $url;
    public $file;
    
    public function execute($queue)
    {
        file_put_contents($this->file, file_get_contents($this->url));
    }
}

以下是向队列发送任务的方法

Yii::$app->queue->push(new DownloadJob([
    'url' => 'http://example.com/image.jpg',
    'file' => '/tmp/image.jpg',
]));

将工作项推入队列,该工作项将在 5 分钟后运行

Yii::$app->queue->delay(5 * 60)->push(new DownloadJob([
    'url' => 'http://example.com/image.jpg',
    'file' => '/tmp/image.jpg',
]));

任务的确切执行方式取决于使用的驱动程序。大多数驱动程序都可以通过控制台命令运行,这些命令组件会自动注册到您的应用程序中。

此命令将循环获取并执行任务,直到队列为空

yii queue/run

此命令启动一个守护进程,无限期地查询队列

yii queue/listen

有关特定于驱动程序的控制台命令及其选项的更多详细信息,请参阅文档。

组件还具有跟踪推入队列的工作项状态的 ability。

// Push a job into the queue and get a message ID.
$id = Yii::$app->queue->push(new SomeJob());

// Check whether the job is waiting for execution.
Yii::$app->queue->isWaiting($id);

// Check whether a worker got the job from the queue and executes it.
Yii::$app->queue->isReserved($id);

// Check whether a worker has executed the job.
Yii::$app->queue->isDone($id);

有关更多详细信息,请参阅 指南