Laravel 2017 心得: Laravel 事件及序列功能應用
Queue
1.讓頁面反應變快
e.g sendmail
e.g 更新資料庫後,要跑一個後製作業
如將中文斷字斷詞後,放到title_fulltext欄位
2.延遲處理
e.g update web cache
4.可靠性
可retry
設定timeout時間
5.JOB or Event
單一工作-->job
有順序--->event
有反應時間需求-->把 event 丟到queue
php artisan queue:failed
php artsian queue:flush
laravel 內建Queue driver
Event
觀察者模式
e.g 文章修改
Cache Update
php artsian event:generate
event(new PostUpdate($post));
文章更新後 更新快取
參考: http://divinglaravel.com/queue-system
DRY
把事件相依, 拆開
讓工作重複利用
實用案例
1.註冊發信
1.設定job table
>php artisan queue:table
>php artisan migrate
2.修改.env
QUEUE_DRIVER=database #使用資料庫, =sync 同步測試用
3.建立SendmailJob
>php artisan make:job SendMailJob
4.修改app\job=SendMailJob.php
public function handle(AudioProcessor $processor)
{
Mail::send('emails.welcome', ['key' => 'value'], function($message)
{
$message->to('foo@example.com', 'John Smith')->subject('Welcome!');
});
}
5.呼叫Job
public function Index(Request $request)
{
//直接發送
//SendmailJob::dispatch();
//delay 10 min
SendmailJob::dispatch()->delay(Carbon::now()->addMinutes(10));
}
>php artisan queue:lis
2.後製:更新全文檢索資料