首頁 > 軟體

Yii使用queue實現佇列流程講解

2022-11-03 14:01:51

一、安裝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'//註冊控制檯命令
],
'components' => [
        'queue' => [
            'class' => 'yiiqueuedbQueue',//需要引入的queue類
            'db' => 'db',//資料庫設定
            'tableName' => '{{%queue}}',//需要新建的佇列表名
            'channel' => 'test_db_queue',//佇列頻道金鑰
            'mutex' => 'yiimutexMysqlMutex',//用於同步查詢
            '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' => 'yiiconsolecontrollersMigrateController',
            'migrationPath' => null,
            'migrationNamespaces' => [
                'yiiqueuedbmigrations',
            ],
        ],
    ],

主要上述的設定不是在components的設定內部,而是與其同級,設定完成之後我們在命令列執行php yii發現如下命令queue-migrate,此命令就是幫助我們去新建一個queue佇列資料表

php yii queue-migrate

這時候我們就可以在我們的資料庫中發現對了一張queue表

三、使用queue

下面我寫一個簡單的下載檔案佇列進行測試

1:寫一個下載檔案的佇列類:

<?php
namespace appcomponents;
use Yii;
use yiibaseBaseObject;
/**
 * Class DownloadJob
 * @package appcomponents
 */
class DownloadJob extends BaseObject implements yiiqueueJobInterface
{
    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://s3.ap-northeast-1.wasabisys.com/img.it145.com/202211/20181030132555-623070617127980ntpdxk01y3s.jpg',
            'file' => '/tmp/image.jpg',
        ]));
你也可以推遲指定秒執行
//推遲5秒
Yii::$app->queue->delay(5 * 60)->push(new DownloadJob([
            'url' => 'https://s3.ap-northeast-1.wasabisys.com/img.it145.com/202211/20181030132555-623070617127980ntpdxk01y3s.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內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com