Laravel 佇列 --- database 驅動(今天剛學習了佇列,記錄下筆記)

NaturalGao發表於2019-01-02

剛學習了laravel佇列,把筆記記一下。

1.第一步配置(.env)

QUEUE_CONNECTION=database

2.database 驅動設定

第一步:生成 jobs 資料遷移表

php artisan queue:table

效果如下:
file
第二步: 建立jobs表,執行遷移命令

php artisan migrate

效果如下:
file

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檔案

效果如下:

file
第二步:編寫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.開啟日誌檔案
如圖:
file
會發現我們在 Email.php handle下列印的資料

完結

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章