參考https://github.com/yiisoft/yii2-queue/blob/master/docs/guide/README.md
一.基於redis
1.安裝redis ,並進行相關配置
2.yii2 項目中使用composer 安裝 yii2-redis
3.yii2 項目中使用compsoer 安裝yii2-queue
4.將redis和queue配置寫入文件例如在config中
$redis = require(__DIR__ . '/redis.php'); $queue = require(__DIR__ . '/queue.php');
web.php
'bootstrap' => ['log', 'queue'], ..... 'components' => [ 'redis' => $redis, 'queue' => $queue, .... ]
queue.php
<?php return [ 'class' => 'yii\queue\redis\Queue', 'redis' => 'redis', // Redis connection component or its config 'channel' => 'queue', // Queue channel key ];
redis.php
<?php return [ 'class' => 'yii\redis\Connection', 'hostname' => '192.168.221.134', 'port' => 6379, 'database' => 0, 'password' => '123456' ];
5.新建任務類供具體代碼調用,例如在components中新建task目錄,並新建如下類
TesttaskJob.php <?php namespace app\components\task; use Yii; use yii\base\Object; use app\models\MyTest; class TesttaskJob extends Object implements \yii\queue\Job { public $name; public $content; public function execute($queue) { $mytest = new MyTest([ 'name' => $this->name, 'content' => $this->content, 'created' => time(), ]); $mytest->save(); } }
調用部分
use app\components\task\TesttaskJob; ... $job = new TesttaskJob([ 'name' => 'zhangs', 'content' => 'ahjasdasdasd', ]); $res = Yii::$app->queue->delay(2 * 60)->push($job); ...
6.服務器端 新建定時任務 后台執行 yii queue/listen ,執行了數個后台任務后可停止
yii queue/listen 5 //表示每隔5s監聽一次隊列 yii queue/run 運行隊列任務直到空,一般用於定時cron yii queue/info 查看隊列狀態