laravel8 + redis 队列

 

 

执行命令 生成job:   php artisan make:job 自定义名称

修改queue.php 配置文件

'redis' => [
'driver' => 'redis',
'connection' => 'queue',  【databases.php中单独配置一个redis的链接 名为queue】
'queue' => env('REDIS_QUEUE', 'default'),
'retry_after' => 90,
'block_for' => null,
'after_commit' => false,
],

databases.php配置文件:

'queue' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '4'),
]

<?php

namespace App\Jobs;

use App\Common\Status;
use App\Http\Logic\Admin\JobLogic;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Redis;

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

    private $data;

    /**
     * Create a new job instance.
     * @param $data
     */
    public function __construct($data)
    {

        $this->data = $data;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {

        var_dump($this->data);

    }
}

 

    App\Jobs\SendEmail::dispatch(["noteId" => $noteId, "source" => 1, "annex" => $annex, "jid" => $jid])
                // ->onConnection('redis');  // 指定redis链接
              ->onQueue("test");  // 指定队列名称
                ->delay(now()->addMinutes(2));  // 延时时间

 

 

 

开启监听队列: php artisan queue:work redis --queue=test --tries=3  // 指定redis 队列名称 和失败后最大尝试次数3次 

一开始玩了几把默认的 一直无法开始消费和投递 之后加上  
->onConnection('redis'); 才算成功 后面有空再研究下

官方说明地址: https://learnku.com/docs/laravel/8.x/queues/9398
posted @ 2024-03-04 15:43  现世中的素人  阅读(26)  评论(0编辑  收藏  举报