刚学习了 laravel 队列,把笔记记一下。
1. 第一步配置(.env)
QUEUE_CONNECTION=database
2.database 驱动设置
第一步:生成 jobs 数据迁移表
php artisan queue:table
效果如下:
第二步: 创建 jobs 表,执行迁移命令
php artisan migrate
效果如下:
3. 模拟数据
第一步: 进入 thinker
php artisan thinker
第二步:创建数据 (thinker 命令)
factory(App\User::class,10)->create();
// 创建 10 个用户
打开 users 表 就能看到 创建的 10 个新用户
4. 创建 Jobs 及编写
第一步:创建
php artisan make:job Email
此时能在 app 目录下生成个 Jobs 文件夹 及我们创建的 Email.php 文件
效果如下:
第二步:编写 Email.php
<?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\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Log;
class Email implements ShouldQueue
{
use Dispatchable, 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('发送的邮件是:'.$this->user->email);
}
}
6. 创建控制器, 分发任务
第一步:创建 Usercontroller 控制器
php artisan make:controller UserController
第二步:编写 Usercontroller
<?php
namespace App\Http\Controllers;
use App\Jobs\Email;
use App\Jobs\SendReminderEmail;
use App\User;
class UserController extends Controller
{
//
public function store()
{$users = User::where('id','<',6)->get();
foreach ($users as $user){$this->dispatch(new Email($user));
}
return 'Done';
}
}
7. 编写路由 添加队列
1.web.php
Route::get('/', 'UserController@store');
2. 访问路由后 jobs 表将会生成 符合条件的用户
3. 执行任务
php artisan queue:work
执行完命令后 jobs 刚才添加的数据 就没了
4. 打开日志文件
如图:
会发现我们在 Email.php handle 下打印的数据