如何在Laravel使用 Job、Queue、Supervisor
這篇記錄一下實做過程的步驟和遇到的問題,
避免以後忘記了又要重新再學一次
本篇分為3個部分:
1. 如何配置和分派任務
2. CentOS 7 執行 Supervisor
3. Laradock執行 Supervisor
如果用 database 當作紀錄工具,首先需要生成一個 table,預設名稱是 jobs
php artisan queue:table
php artisan migrate然後找到 .env 這隻檔案的 QUEUE_DRIVER,調整如下QUEUE_DRIVER=database #原本是sync,看需求也可改為redis
然後生成一個:可派發任務的 job class
php artisan make:job ProcessJob # 名稱隨你取然後這個檔案會存在於 app/Jobs 路徑底下
ProcessJob// 任務生存時間
public $timeout = 60;// 想傳遞進來的參數
protected $id;/**
* 實例化
*/
public function __construct($id)
{
$this->id = $id;
} /**
* 要做的事放這裡
*/
public function handle()
{
doSomething($this->id);
}
}
然後在任何地方 ,例如 route/web.php 內,或是 XxxController.php 內引用 ProcessJob 這個 class 後就可以使用 dispatch() 這個 function 去派發任務到 queue ,然後在 database 的
jobs table裡面就可以看到一堆等待執行的任務了~# 實例化的時候就要把參數丟進,不然 ProcessJob 就會報錯 (參數數量不對...)
$job = new ProcessJob($id);# dispatch 的時候也要再丟一次參數(不是new的時候給過了嗎? 有朋友能幫忙解惑嗎?)
$job->dispatch($id)->onQueue('queue_num_1')->delay(10);### ps. onQueue、delay 為選填項目,分別為頻道和任務延遲執行時間 ###
單執行序監聽php artisan queue:work
執行後,如果有任務就會執行,否則就會持續監聽等待任務
多執行序監聽Supervisor
下面分一般 linux 執行supervisor,和 Laradock 環境執行supervisor,其實都是執行Supervisor的流程
一般 Linux 執行supervisor
過程中遇到了一些問題,然後是參考這兩個網站的內容
Centos7.3配置Supervisor遇到的一些小问题
Why I get this error laravel-worker: ERROR (no such group)
首先要先安裝套件
yum install -y supervisorcd /etc/supervisord.d // 然後你可以在這個路徑底下寫一個設定檔
vi laravel-worker.ini // 注意副檔名官網寫預設是在這個路徑底下 /etc/supervisor/conf.d
寫一份這檔名的檔案 laravel-worker.conf
然後你就會看到噴錯啦!!!
因為在 /etc/supervisord.conf裡寫的是[include]
files = supervisord.d/*.ini
然後在 laravel-worker.ini這份檔案裡
[program:laravel-worker] # 啟動時需要這個名稱
process_name=%(program_name)s_%(process_num)02dcommand=php /[laravel-workspace]/artisan# artisan 的路徑要自己調整,下是可選參數
# database/redis driver
# --queue=autostart=true
autorestart=true
user=root # 執行人
numprocs=8 # 執行序數量
redirect_stderr=true
stdout_logfile=/home/forge/app.com/worker.log寫好了以後可以照官網寫的順序啟動
啟動 Supervisor
一旦設定檔案被建立,你可以使用以下指令更新及啟動 Supervisor:
sudo supervisorctl rereadsudo supervisorctl updatesudo supervisorctl start laravel-worker:*Laradock 環境執行supervisor
依照Laradock官方文件內容:在 php-worker 目錄下先複製這個檔案laravel-worker.conf.example => laravel-worker.conf
內容大致和上面的 laravel-worker.ini內容相同、主要調整 command 的部分後就可以執行docker-compose up -d --build php-worker
之後便會自行啟動監聽,可以執行下列指令查看:docker exec -it laradock_php-worker_1 top
會看到有多個執行序

如果沒有正常執行等待中的任務,可以嘗試執行
supervisorctl reread或是修改laravel-worker.conf 指定監聽某個頻道 --queue=? 後重新 build
然後執行上面的 reread …