配置使用数据库作为任务存储驱动
#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
更多介绍请移步到官方文档队列
Comment here is closed