使用yii2-queue結合redis來實現佇列功能
阿新 • • 發佈:2019-04-02
使用yii2-queue結合redis來實現佇列功能
為什麼用它?
其實之前用過activemq,但是這個東西基於Java的,得裝一堆東西,還得配置,而且我只是比較簡單的功能,所以就沒打算上這個,不過後面瞭解到其實yii2-queue也可以結合的
安裝
首先得安裝,用的是composer,這個很簡單,在你的專案目錄下面
composer require --prefer-dist yiisoft/yii2-queue
##配置
找到你的專案配置檔案,高階版是main.php,普通版console.php,在裡面加上你的配置,這個yii2-queue可以使用各種驅動模式來做,我這裡選取了redis,所以你得必須先有redis,如果沒有可以用file來驅動
// 把這個元件註冊到控制檯 'bootstrap' => [ 'queue', ], 'components' => [ 'queue' => [ 'class' => \yii\queue\redis\Queue::class, // 連線元件或它的配置 'redis' => 'redis', // Queue channel key 'channel' => 'queue', ], 'redis' => [ 'class' => 'yii\redis\Connection', 'hostname' => 'localhost', 'port' => 6379, 'database' => 0, ] ]
配置就那麼簡單
使用
首先我們得寫一個隊裡檔案,裡面執行一個隊裡的任務,我這裡簡單的寫了一個
<?php namespace common\components; use yii\base\BaseObject; class Job extends BaseObject implements \yii\queue\JobInterface { public $url; public $file; public function execute($queue) { file_put_contents($this->file, file_get_contents($this->url)); } }
上面是佇列執行的檔案,我們要使用它是這樣使用的,一般在控制器裡面使用
use common\components\Job;
public function actionJob(){
//新增任務到佇列
Yii::$app->queue->push(new Job([
'url' => 'http://img.netpc.com.cn/2018/06/12080502tmd.jpg',
'file' => '/Users/gongchuandong/www/project/ideaboat\1.jpg',
]));
}
// 延時5s觸發
Yii::$app->queue->delay(5)->push(new Job([
'url' => 'http://img.netpc.com.cn/2018/06/12080502tmd.jpg',
'file' => '/Users/gongchuandong/www/project/ideaboat\1.jpg',
]));
最後你還得在命令列把這個佇列的監聽監聽起來
./yii queue/listen
這樣就可以了
坑
我在佇列裡面執行sql的時候,發現了一個坑,無論如何都無法儲存,保這個錯誤
SQLSTATE[HY000] [2002] No such file or directory in
最後Google一下,需要把資料庫連線從localhost改