PHP

Laravel Redisを用いたキューイングのお勉強

Laravel

キューの処理としてAWS SQS, RDBを用いたもの色々あります。

Redisを用いたキューイング処理を触ることに。それもすぐ。

お勉強しながらまとめます(。- .•)

 

 

キューまわりの用語

 

Queue(キュー)

Job(ジョブ)が並ぶ列。ジョブは処理のこと。特に重い処理をジョブ化してキューに並ばせて後回しにすることで、アプリケーションのレスポンスが高速化します。

利用例)
ショッピングサイトのメール送信など。

 

dispatch

キューにジョブを並ばせる処理。

 

Supervisor

今回の場合、Laravelで生成されたqueue:workプロセスがダウンしていないか監視して、ダウンしたら復旧させる。

php artisan queue:work

これを永続化させる役割になります。

 

チュートリアル

通常はイベントで処理するけれど、今回はジョブで。

 

.env

 

## Redis
CACHE_DRIVER=redis
SESSION_DRIVER=redis
REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379
REDIS_READ_WRITE_TIMEOUT=60


QUEUE_CONNECTION=redis
QUEUE_DRIVER=redis

redisとQueueの設定

 

$ docker-compose exec php-fpm php artisan make:job TestJob

 

app/Jobs/TestJob.php

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Log;

class TestJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        Log::info('テストJob');
    }
}

 

 

routes/web.php

Route::get('/', function(){
    dispatch(new TestJob())->delay(now()->addMinutes(2));
    return 'テストJobを追加したよ!';
});

->delay(now()->addMinutes(2));2分後に処理を行うように指定。

 

queue:workの起動

$ docker-compose exec php-fpm php artisan queue:work

 

http://localhost/
アクセスする。

これで2分後にジョブが行われる。

 

RDBで処理したい場合

.env

## MySQL
DB_CONNECTION=mysql
DB_HOST=mysql80
DB_PORT=3306
DB_DATABASE=appdb
DB_USERNAME=root
DB_PASSWORD=secret

QUEUE_CONNECTION=database
QUEUE_DRIVER=database

 

$ docker-compose exec php-fpm php artisan queue:table
$ docker-compose exec php-fpm php artisan queue:failed-table
$ docker-compose exec php-fpm php artisan migrate

 

キューワーカを停止させてから、起動させてください。

$ docker-compose exec php-fpm php artisan queue:work

 

 

Supervisorでワーカーを監視する

 

 

@see

Amazonおすすめ

iPad 9世代 2021年最新作

iPad 9世代出たから買い替え。安いぞ!🐱 初めてならiPad。Kindleを外で見るならiPad mini。ほとんどの人には通常のiPadをおすすめします><

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)