批处理任务的场景在我们的开发中经常会用到,比如群发邮件、消息通知、短信、秒杀等,我们需要将这种耗时的操作放到队列中进行处理,所以这大大缩短了网络请求和相应的时间。下面解释Laravelconfig/queue.php中队列的使用配置文件env('QUEUE_DRIVER','sync'),'connections'=>['sync'=>['driver'=>'sync',],'database'=>['driver'=>'database','table'=>'jobs','queue'=>'default','retry_after'=>90,],'beanstalkd'=>['driver'=>'beanstalkd','host'=>'localhost','queue'=>'default','retry_after'=>90,],'sqs'=>['driver'=>'sqs','key'=>'your-public-key','secret'=>'your-secret-key','prefix'=>'https://sqs.us-east-1.amazonaws.com/your-account-id','queue'=>'your-queue-name','region'=>'us-east-1',],'redis'=>['驱动程序'=>'redis','连接'=>'default','queue'=>'default','retry_after'=>90,],],'failed'=>['database'=>env('DB_CONNECTION','mysql'),'table'=>'failed_jobs',],];配置文件默认使用同步驱动sync,每个队列驱动的配置都可以在这个文件中找到,包括database,Beanstalkd,AmazonSQS,Redis其中还包含一个nullqueuedriver,用于放弃队列的任务.失败配置项用于配置失败队列任务存放的数据库和数据表。接下来我们需要创建一个队列任务类。具体配置请参考队列驱动配置文档创建一个队列任务类,然后一个SendEmail.php文件phpartisanmake:jobSendEmailuser=$user;}/***执行发送邮件等队列方法**@returnvoid*/publicfunctionhandle(){$user=$this->user;Mail::raw('在这里填写邮件内容',function($message){//发件人(你自己的邮箱地址和姓名)$message->from('your_email@163.com','yourname');//收件人的电子邮件地址$message->到($this->user);//邮件主题$message->subject('排队发送邮件');});}}任务类创建完成后,控制器向队列中添加数据,创建和发送消息控制器使用dispatch方法手动分发任务。在该方法中,传递了任务类的实例。dispatch(newSendEmail($user));}}然后访问浏览器,运行项目,将任务推送到队列中,然后使用Artisan命令执行队列中的任务phpartisanqueue:queue:work默认只执行一次队列请求,当请求被执行;queue:listen监听队列请求,只要它在运行,它总是可以接受请求,除非它被手动终止;queue:work--daemon和listen一样,不同的是work不需要再次加载框架,直接运行任务。通常建议使用它来处理队列监控。注意:使用queue:work--daemon时,更新代码时,需要先停止,然后重启,这样修改后的代码才能应用。
