.env文件中设置队列驱动为数据库QUEUE_DRIVER=database
创建队列用到的数据表
php artisan queue:table
执行migrate
php artisan migrate
进入tinker
php artisan tinker
批量创建用户数据
factory(App\User::class, 20)->create();
创建一个发送邮件的工作
php artisan make:job SendEmail
<?php
namespace App\Jobs;
use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Facades\Log;
class SendEmail implements ShouldQueue
{
use InteractsWithQueue, Queueable, SerializesModels;
public $user;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct(User $user)
{
//
$this->user = $user;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//调用发送邮件的业务逻辑并记录日志
Log::info('send email to user: '.$this->user->email);
}
}
创建user控制器
php artisan make:controller UserController
<?php
namespace App\Http\Controllers;
use App\Jobs\SendEmail;
use App\User;
use Illuminate\Http\Request;
class UserController extends Controller
{
//添加任务到队列
public function update()
{
$users = User::where('id', '<', 11)->get();
foreach ($users as $user) {
$this->dispatch(new SendEmail($user));
}
return 'done';
}
}
以守护进程来执行队列任务
php artisan queue:work