Yii使用queue實(shí)現(xiàn)隊(duì)列流程講解
一、安裝queue
composer require yiisoft/yii2-queue
二、配置queue
安裝queue之后我們?cè)陧?xiàng)目中運(yùn)行 php yii時(shí)這時(shí)候我們發(fā)現(xiàn)沒有queue的相關(guān)命令,這是怎么回事呢?
這是由于我們沒有對(duì)queue進(jìn)行配置
注意:這里配置queue時(shí)必須使得web和console都有關(guān)于queue的配置,例如yii的基礎(chǔ)版的console.php和web.php文件都需要進(jìn)行queue配置
yii的queue隊(duì)列支持多種驅(qū)動(dòng),例:DB、Redis、RabbitMQ、AMQP、Beans.和Gearman
這里我是用的時(shí)DB(數(shù)據(jù)庫(kù))驅(qū)動(dòng),如果你想使用其他的驅(qū)動(dòng),配置相關(guān)可以參考:傳送門
'bootstrap' => [ 'queue'//注冊(cè)控制臺(tái)命令 ], 'components' => [ 'queue' => [ 'class' => 'yii\queue\db\Queue',//需要引入的queue類 'db' => 'db',//數(shù)據(jù)庫(kù)配置 'tableName' => '{{%queue}}',//需要新建的隊(duì)列表名 'channel' => 'test_db_queue',//隊(duì)列頻道密鑰 'mutex' => 'yii\mutex\MysqlMutex',//用于同步查詢 'ttr' => 300,//對(duì)應(yīng)默認(rèn)最大執(zhí)行時(shí)長(zhǎng)(秒) ], ],
配置完成之后,我們?cè)诿钚猩蠄?zhí)行 php yii時(shí)發(fā)現(xiàn)已經(jīng)有了queue的相關(guān)命令了
queue相關(guān)命令說(shuō)明:
php yii queue/clear #清除隊(duì)列
php yii queue/exec #執(zhí)行隊(duì)列任務(wù)
php yii queue/info #顯示有關(guān)隊(duì)列狀態(tài)的信息(默認(rèn)為此命令)
php yii queue/listen #監(jiān)聽隊(duì)列并運(yùn)行隊(duì)列任務(wù)
php yii queue/remove #按照id刪除隊(duì)列任務(wù)
php yii queue/run #運(yùn)行所有隊(duì)列任務(wù)
由于我們使用的時(shí)DB驅(qū)動(dòng)這時(shí)候我們需要新建一個(gè)對(duì)應(yīng)的queue隊(duì)列表,在yii中queue的隊(duì)列組件中提供了queue隊(duì)列表創(chuàng)建的方法,我們只需要在腳本配置文件中進(jìn)行配置即可,配置如下:
'controllerMap' => [ 'queue-migrate' => [ 'class' => 'yii\console\controllers\MigrateController', 'migrationPath' => null, 'migrationNamespaces' => [ 'yii\queue\db\migrations', ], ], ],
主要上述的配置不是在components的配置內(nèi)部,而是與其同級(jí),配置完成之后我們?cè)诿钚袌?zhí)行php yii發(fā)現(xiàn)如下命令queue-migrate,此命令就是幫助我們?nèi)バ陆ㄒ粋€(gè)queue隊(duì)列數(shù)據(jù)表
php yii queue-migrate
這時(shí)候我們就可以在我們的數(shù)據(jù)庫(kù)中發(fā)現(xiàn)對(duì)了一張queue表
三、使用queue
下面我寫一個(gè)簡(jiǎn)單的下載文件隊(duì)列進(jìn)行測(cè)試
1:寫一個(gè)下載文件的隊(duì)列類:
<?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:調(diào)用隊(duì)列類:
Yii::$app->queue->push(new DownloadJob([ 'url' => 'https://api.wj0511.com/static/upload/pic/20181030132555-623070617127980.jpg', 'file' => '/tmp/image.jpg', ])); 你也可以推遲指定秒執(zhí)行 //推遲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', ]));
運(yùn)行調(diào)用方法后,在命令行執(zhí)行 php yii queue這時(shí)候我們會(huì)發(fā)現(xiàn)有一個(gè)等待的隊(duì)列任務(wù)
這時(shí)候我們可以使用php yii queue/run 或php yii queue/listen去執(zhí)行隊(duì)列任務(wù)php yii queue/listen -v可以看到執(zhí)行隊(duì)列的信息
到此這篇關(guān)于Yii使用queue實(shí)現(xiàn)隊(duì)列流程講解的文章就介紹到這了,更多相關(guān)Yii queue內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
修復(fù)ShopNC使用QQ 互聯(lián)時(shí)提示100010 錯(cuò)誤
本文給大家介紹了修復(fù)ShopNC使用QQ 互聯(lián)時(shí)提示100010 錯(cuò)誤的方法,以及QQ互聯(lián)里面的處理方法,有需要的小伙伴可以參考下2015-11-11解析用PHP實(shí)現(xiàn)var_export的詳細(xì)介紹
本篇文章是對(duì)使用PHP實(shí)現(xiàn)var_export的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06PHP 防注入函數(shù)(格式化數(shù)據(jù))
下面的函數(shù)通過(guò)格式化數(shù)據(jù)的方法實(shí)現(xiàn)數(shù)據(jù)的addslashes,不過(guò)也建議大家參考下discuz的防注入函數(shù)。2011-08-08