Yii使用queue實現隊列流程講解
目錄
- 一、安裝queue
- 二、配置queue
- 三、使用queue
一、安裝queue
composer require yiisoft/yii2-queue
二、配置queue
安裝queue之后我們在項目中運行 php yii時這時候我們發現沒有queue的相關命令,這是怎么回事呢?
這是由于我們沒有對queue進行配置
注意:這里配置queue時必須使得web和console都有關于queue的配置,例如yii的基礎版的console.php和web.php文件都需要進行queue配置
yii的queue隊列支持多種驅動,例:DB、Redis、RabbitMQ、AMQP、Beans.和Gearman
這里我是用的時DB(數據庫)驅動,如果你想使用其他的驅動,配置相關可以參考:傳送門
"bootstrap" => [ "queue"http://注冊控制臺命令 ], "components" => [ "queue" => [ "class" => "yii\queue\db\Queue",//需要引入的queue類 "db" => "db",//數據庫配置 "tableName" => "{{%queue}}",//需要新建的隊列表名 "channel" => "test_db_queue",//隊列頻道密鑰 "mutex" => "yii\mutex\MysqlMutex",//用于同步查詢 "ttr" => 300,//對應默認最大執行時長(秒) ], ],
配置完成之后,我們在命令行上執行 php yii時發現已經有了queue的相關命令了
queue相關命令說明:
php yii queue/clear #清除隊列
php yii queue/exec #執行隊列任務
php yii queue/info #顯示有關隊列狀態的信息(默認為此命令)
php yii queue/listen #監聽隊列并運行隊列任務
php yii queue/remove #按照id刪除隊列任務
php yii queue/run #運行所有隊列任務
由于我們使用的時DB驅動這時候我們需要新建一個對應的queue隊列表,在yii中queue的隊列組件中提供了queue隊列表創建的方法,我們只需要在腳本配置文件中進行配置即可,配置如下:
"controllerMap" => [ "queue-migrate" => [ "class" => "yii\console\controllers\MigrateController", "migrationPath" => null, "migrationNamespaces" => [ "yii\queue\db\migrations", ], ], ],
主要上述的配置不是在components的配置內部,而是與其同級,配置完成之后我們在命令行執行php yii發現如下命令queue-migrate,此命令就是幫助我們去新建一個queue隊列數據表
php yii queue-migrate
這時候我們就可以在我們的數據庫中發現對了一張queue表
三、使用queue
下面我寫一個簡單的下載文件隊列進行測試
1:寫一個下載文件的隊列類:
<?php namespace app\components; use Yii; use yii\base\BaseObject; /** * Class DownloadJob * @package app\components */ 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)); } }
2:調用隊列類:
Yii::$app->queue->push(new DownloadJob([ "url" => "https://api.wj0511.com/static/upload/pic/20181030132555-623070617127980.jpg", "file" => "/tmp/image.jpg", ])); 你也可以推遲指定秒執行 //推遲5秒 Yii::$app->queue->delay(5 * 60)->push(new DownloadJob([ "url" => "https://api.wj0511.com/static/upload/pic/20181030132555-623070617127980.jpg", "file" => "/tmp/image.jpg", ]));
運行調用方法后,在命令行執行 php yii queue這時候我們會發現有一個等待的隊列任務
這時候我們可以使用php yii queue/run 或php yii queue/listen去執行隊列任務php yii queue/listen -v可以看到執行隊列的信息
到此這篇關于Yii使用queue實現隊列流程講解的文章就介紹到這了,更多相關Yii queue內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!