配置使用数据库作为任务存储驱动

#config/queue.php文件中
'default' => env('QUEUE_CONNECTION', 'sync'),默认是同步。
QUEUE_CONNECTION对应.env中的QUEUE_CONNECTION
我们修改.env文件使用mysql数据库作为驱动:QUEUE_CONNECTION=database 

数据迁移(驱动的必要设置)说白了就是创建存储队列任务的数据表

#在database/migrations文件夹下面生成迁移文件
xxxx_xx_xx_xxxxxx_create_jobs_table.php
xxxx_xx_xx_xxxxxx_create_failed_jobs_table.php

php artisan queue:table         #处理任务
php artisan queue:failed-table  #处理失败的任务
#运行迁移文件
php artisan migrate
会在数据库生成 xxx_jobs和xxx_failed_jobs两张表(xxx为表前缀)

生成观察者类并关联模型

php artisan make:observer NoticeObserver -m Models/Notice
#说明NoticeObserver类中方法
#添加之后调用
public function created(Notice $notice){}
#修改之后调用
public function updated(Notice $notice){}
#伪删除之后调用
public function deleted(Notice $notice){}
#伪删除还原之后调用
public function restored(Notice $notice){}
#强制删除之后调用
public function forceDeleted(Notice $notice){}

在对应模型(Models/Notice)中注册该观察者

#这样在操作添加修改等一系列动作时NoticeObserver会作为观察者去执行对应的方法去生成任务插入表中,等待消费者消费。
    protected static function boot()
    {
        parent::boot();
        //注册自定义观察类
        self::observe(NoticeObserver::class);
    }

添加任务类 Jobs/NoticeJob.php

 php artisan make:job NoticeJob
#说明
 #该方法执行任务
 public function handle()
 {
       sleep(10);#默认异步延时
 }

发布上一步中编写的任务,这里模拟在创建后生成然后消费

#在观察者类(NoticeObserver的created方法)中发布任务
 public function created(Notice $notice)
 {
        //发布任务
        dispatch(new NoticeJob());
  }

消费任务

php artisan queue:work

更多介绍请移步到官方文档队列

Last modification:July 2, 2022
如果觉得我的文章对你有用,请随意赞赏