Laravel 队列使用

Laravel 队列使用

1.修改根目录

.env 文件的 **QUEUE_CONNECTION **字段配置为 databasephp

Laravel可配置多种队列驱动,包括 "sync", "database", "beanstalkd", "sqs", "redis", "null"(具体参见app/config/queue.php)
其中sync为同步,database为使用数据库,后面三种为第三方队列服务,最后一种为不使用队列。mysql

image-20210114110302367

该位置具体是什么请查看app/queuelaravel

image-20210114110110447

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

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

php artisan queue:table

生产一张队列表sql

php artisan migrate

mysql版本5.7.7如下可能会报以下错误数据库

image-20210114103312698

解决方案网络

打开app/Providers/AppServiceProvider文件,在boot方法中加入以下代码,删除数据库中已经生成的迁移数据表,再次运行就能够成功。app

必定要删除已经生成的job数据表,否者汇报以下错误ide

image-20210114104119413

\Schema::defaultStringLength(191); //add fixed sql

数据库最终效果测试

image-20210114104215137

3.生成任务类

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

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

你能够用如下的 Artisan 命令来生成一个新的队列任务:

php artisan make:job SetLog

image-20210114104708075

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

protected $message;

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

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        \Log::info($this->message);
    }

  

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

public function index(Request $request){
	SetLog::dispatch(date('Y-m-d H:i:s') . "进入了系统");
}

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

image-20210114105632887

6.执行命令开启队列

php artisan queue:work

  这时,队列表中的任务执行后就会自动删除了,相似消费了任务

image-20210114105849527

image-20210114110429097

以上是抛转引玉的一个简单例子,具体细节能够查看laravel的队列文档

相关文章
相关标签/搜索