使用yii2-queue結合redis來實現隊列功能

使用yii2-queue結合redis來實現隊列功能

爲何用它?

其實以前用過activemq,可是這個東西基於Java的,得裝一堆東西,還得配置,並且我只是比較簡單的功能,因此就沒打算上這個,不事後面瞭解到其實yii2-queue也能夠結合的php

安裝

首先得安裝,用的是composer,這個很簡單,在你的項目目錄下面redis

composer require --prefer-dist yiisoft/yii2-queue

##配置sql

找到你的項目配置文件,高級版是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,
        ]
    ]

配置就那麼簡單bootstrap

使用

首先咱們得寫一個隊裏文件,裏面執行一個隊裏的任務,我這裏簡單的寫了一個yii2

<?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));
    }
}

上面是隊列執行的文件,咱們要使用它是這樣使用的,通常在控制器裏面使用app

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',
   ]));

最後你還得在命令行把這個隊列的監聽監聽起來composer

./yii queue/listen

這樣就能夠了yii

我在隊列裏面執行sql的時候,發現了一個坑,不管如何都沒法保存,保這個錯誤ide

SQLSTATE[HY000] [2002] No such file or directory in

最後Google一下,須要把數據庫鏈接從localhost改成127.0.0.1,就OK了

相關文章
相關標籤/搜索