剛學習了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下列印的資料
完結
本作品採用《CC 協議》,轉載必須註明作者和本文連結