0x01 配置
1、修改.env,我这里是采用的数据库,一般是用的异步服务器或者redis。我这里只是用作测试QUEUE_DRIVER=database
2、添加数据库,执行php artisan queue:table
php artisan queue:failed-table
php artisan migrate
3、创建队列任务,我这里使用的是发送邮件的例子php artisan make:job SendReminderEmail
0x02 控制器use Mail;
use App\Jobs\SendReminderEmail;
public function email()
{
$datas = \DB::table('data_email')->get();
foreach($datas as $data){
dispatch(new SendReminderEmail($data->name,$data->email));
}
return redirect('/users');
}
0x03 队列文件
编辑队列文件SendReminderEmail.php<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Mail;
class SendReminderEmail implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $name;
protected $email;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($name, $email)
{
$this->name = $name;
$this->email = $email;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
// 如果参试大于三次
if ($this->attempts() > 3) {
\Log::info($this->name.'邮件参试失败过多');
}else{
// 每次进来休息3秒钟
sleep(3);
$flag = Mail::send('emails.test',['name'=>$this->name],function($message){
$message ->to($this->email)->subject('邮件测试');
});
echo $this->name;
if($flag){
\Log::info($this->name.'邮件发送成功');
}else{
\Log::info($this->name.'邮件发送失败');
}
}
}
public function failed()
{
\Log::error($this->name.'队列任务执行失败'."\n".date('Y-m-d H:i:s'));
}
}
0x04 开始并查看记录
在网站根目录执行,开始监听:php artisan queue:listen
查看storage/logs/laravel.log[2017-05-14 02:06:25] local.INFO: 亲6邮件发送成功
[2017-05-14 02:06:30] local.INFO: 亲7邮件发送成功
[2017-05-14 02:06:35] local.INFO: 亲1邮件发送成功
[2017-05-14 02:06:40] local.INFO: 亲2邮件发送成功
[2017-05-14 02:06:45] local.INFO: 亲3邮件发送成功
[2017-05-14 02:06:50] local.INFO: 亲4邮件发送成功
[2017-05-14 02:06:55] local.INFO: 亲5邮件发送成功
测试成功。。。。