iT邦幫忙

2021 iThome 鐵人賽

DAY 10
0
Modern Web

工作後才知道的後端 30 件小事系列 第 10

認識 Laravel Queue Jobs

什麼是 Queue Jobs?

學過資料結構的朋友一定不陌生,queue 是一種先進先出的資料結構。

而 Laravel 的 queue job 是一個類似待辦清單的功能,以 queue 的方式儲存待辦的任務 (job),然後會有小精靈依序幫你執行 X)

queue job 可以分成兩塊工作來看,一是把任務排進隊伍裡、二是執行任務;算是一個生產者消費者的模型。

  • Push jobs to queue (queue 可以想像成一條隊伍,可以不只一條)
  • Worker processes jobs (有小精靈會去消化工作)

Job

新增一個 job class,在 handle 方法裡寫這個 job 具體要做的事。詳細請參閱官方文件

$ php artisan make:job JOB_NAME

新增一個 job 到隊伍裡:

// This job is sent to the default connection's default queue...
MyJobClass::dispatch();

// This job is sent to the default connection's "emails" queue...
MyJobClass::dispatch()->onQueue('emails');

Push

dispatch 底層其實是把任務 pushdriver

push 前,系統會先去看要推送到哪個 driverdriver 就是我們排隊的地方,可以是資料庫、Redis 等。有哪些 driver 和連線參數可以在config/queue.php 設定。

知道是要 push 到哪個 driver 後,會去看這個 driver 是否已建立連線;有就用,沒有就建立,最後才 push job 到 driver

// 這兩個應該會是一樣的
Queue::connection('Database')->push(new MyJobClass());
MyJobClass::dispatch()->onQueue('Database');

如果沒有指定 driver,Laravel 會採用預設的 driver (config/queue.php['default'])

Queue::push(new MyJobClass());

Run Worker

讓小精靈開始工作的咒語

$ php artisan queue:work

Reference


上一篇
Laravel 實作 Webhooks
下一篇
Laravel Queue Job:深入理解 timeout 的運作
系列文
工作後才知道的後端 30 件小事20

尚未有邦友留言

立即登入留言