laravel-queue队列简单介绍

1. 创建任务

队列的任务类都默认放在 app/Jobs 目录下

php artisan make:job SendMsg
2、分发任务(将任务新增到队列)
    /**
     * 队列测试  分发任务=》生产者    处理任务=》消费者
     */
    public function queue(){
        $user_id = [1,2,3];
        //分发任务队列
        GroupFailMsg::dispatch($user_id)
            ->delay(now()->addSecond(3))  //delay延迟任务分发
            ->onConnection('redis')  //可以指定将任务分发到哪个连接(否则走默认配置)
            ->onQueue('failMsg');  //指定队列,否则走默认default
        dd('队列测试');
    }

3、执行任务逻辑代码
<?php

namespace App\Jobs;

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

class GroupFailMsg implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    /**
     * 任务可以尝试的最大次数
     * @var int
     */
    public $tries = 5; //如果超过最大次数会写入failed_jobs 表中

    private $user_id;
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($user_id)
    {
        //
        $this->user_id=$user_id;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        var_dump($this->user_id);
//        throw new \Exception('失败');
        //执行逻辑
        Log::info(json_encode($this->user_id));
    }
    /**
     * 任务失败的处理过程
     *
     * @param  Exception  $exception
     * @return void
     */
    public function failed(Exception $exception)
    {
        var_dump('失败任务'.$this->user_id);
        // 给用户发送任务失败的通知,等等……
    }
}

4、运行队列处理器

Tip:要使 queue:work 进程一直在后台运行,你应该使用进程管理器比如 Supervisor 来确保队列处理器不会停止运行

 php artisan queue:work --queue=failMsg //指定队列执行failMsg队列 不加默认走配置default
 

5、其他

如果使用 database 队列驱动需要迁移生成jobs和failed_jobs表

php artisan queue:table
php artisan migrate

更多详情:https://learnku.com/docs/laravel/6.x/queues/5168#f7dc2a

zed
请先登录后发表评论
  • latest comments
  • 总共0条评论