dejvidecz / yii2-queue
支持DB、Redis、RabbitMQ、Beanstalk和Gearman的Yii2队列扩展
2.0.2.1
2018-06-14 22:17 UTC
Requires
- php: >=5.5.0
- symfony/process: *
- yiisoft/yii2: ~2.0.13
Requires (Dev)
Suggests
- ext-gearman: Need for Gearman queue.
- ext-pcntl: Need for process signals.
- pda/pheanstalk: Need for Beanstalk queue.
- php-amqplib/php-amqplib: Need for AMQP queue.
- yiisoft/yii2-redis: Need for Redis queue.
README
Yii2队列扩展
一个用于通过队列异步执行任务的扩展。
它支持基于 DB、Redis、RabbitMQ、Beanstalk 和 Gearman 的队列。
文档在 docs/guide/README.md。
安装
安装此扩展的首选方式是通过 composer。
运行以下命令
php composer.phar require --prefer-dist yiisoft/yii2-queue
或者
"yiisoft/yii2-queue": "~2.0.0"
将以下内容添加到您的 composer.json
文件的require部分。
基本用法
每个发送到队列的任务都应该定义为单独的类。例如,如果您需要下载并保存文件,类可能如下所示
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
有关驱动程序命令行和它们的选项的更多详细信息,请参阅文档。
组件具有跟踪推送到队列的作业状态的能力。
// Push a job into queue and get message ID. $id = Yii::$app->queue->push(new SomeJob()); // The job is waiting for execute. Yii::$app->queue->isWaiting($id); // Worker gets the job from queue, and executing it. Yii::$app->queue->isReserved($id); // Worker has executed the job. Yii::$app->queue->isDone($id);
有关更多详细信息,请参阅 指南。