1.更改.env配置文件
默认是sync(同步),就是会立即执行,并没有放入队列。
QUEUE_DRIVER=database
2.生成任务类
php artisan make:job TestJob --queued
运行后会在app/jobs/下生成一个TestJob.php
3.编辑任务类,修改其中的handle方法
namespace App\Jobs; use App\Jobs\Job; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Bus\SelfHandling; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Support\Facades\Mail; use Illuminate\Support\Facades\Storage; class TestJob extends Job implements SelfHandling, ShouldQueue { use InteractsWithQueue, SerializesModels; protected $email; /** * Create a new job instance. * * @return void */ public function __construct($email) { $this->email =$email; } /** * Execute the job. * * @return void */ public function handle() { //写入一个文件试试 $arr = ['email_add'=>$this->email]; Storage::disk('local')->put('testjobs.text',print_r($arr,true)."\r\n"); } }
4.在控制器的任意方法中调用方法加入队列
public function getTest() { $this->dispatch(new TestJob('884358@qq.com')); echo "insert into job success"; }
5.打开指定的url,执行getTest方法,添加任务
运行后,会发现并没有立即写入文件,这时打开数据库中的jobs表,会发现里面多了一行记录。
6.运行队列监视器,执行任务
php artisan queue:listen
运行后,任务会被执行,会写一个文件到指定位置(/storage/app),同时,数据库里的该条任务会被清除。