Laravel 队列


Laravel 队列


正文

database 实现

1.修改根目录 .env 文件的 QUEUE_CONNECTION 字段配置为 database

Laravel可配置多种队列驱动,包括 “sync”, “database”, “beanstalkd”, “sqs”, “redis”, “null”(具体参见app/config/queue.php) 其中sync为同步,database为使用数据库,后面三种为第三方队列服务,最后一种为不使用队列。 通过在 .env 中的 QUEUE_CONNECTION 选项,来决定选择何种驱动。 如 QUEUE_CONNECTION=database 即为选择数据库驱动队列。

2.创建数据库队列表(database方式)

为了使用 database 队列驱动,你需要一张数据表来存储任务。

php artisan queue:table

生成队列数据表jobs 的 migrate 迁移文件,然后执行迁移命令

php artisan migrate

3.生成任务类

在你的应用程序中,队列的任务类都默认放在 app/Jobs 目录下。

如果这个目录不存在,那当你运行 make:job Artisan 命令时目录就会被自动创建。

你可以用以下的 Artisan 命令来生成一个新的队列任务:

php artisan make:job ActCheck

4.在队列类里面的handle方法中写上业务逻辑(比如发送网络请求,发送邮件等等,这里简单写个日志代替)

<?php

namespace App\Jobs;

use App\Models\RadioAct;
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;

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

    protected $act_id;

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

    /**
     * Execute the job.
     *
     * @return bool
     */
    public function handle()
    {
        // act记录
        $actModel = RadioAct::query()
            ->where(['id' => $this->act_id])
            ->first();

        // 相关处理逻辑
        
    }
}

5.在控制器中加入一个测试方法,直接调用队列类的 dispatch方法,类似生产了一个队列任务

public function test()
{
    $act_id = 10;
    ActCheck::dispatch($act_id);
}

这时,由于队列还没开启,数据库的队列表中会有一个任务,等待队列启动后执行

6.执行命令开启队列

php artisan queue:work

user@local# php artisan queue:work
[2021-10-25 20:38:09][47] Processing: App\Jobs\ActCheck
[2021-10-25 20:38:09][47] Processed:  App\Jobs\ActCheck






参考资料

Laravel 5.7 中文文档 队列 https://learnku.com/docs/laravel/5.7/queues/2286

Laravel 队列的简单使用例子 https://www.cnblogs.com/shifu204/p/11730558.html

Laravel 学院 > 队列 https://laravelacademy.org/post/22009


返回