[Laravel] LAMP+Laravel 學習筆記-Queue&Event

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.後製:更新全文檢索資料