隊(duì)列如何使用

Laravel 隊(duì)列為不同的后臺(tái)隊(duì)列服務(wù)提供統(tǒng)一的 API,例如 Beanstalk,Amazon SQS,Redis,甚至其他基于關(guān)系型數(shù)據(jù)庫的隊(duì)列。隊(duì)列的目的是將耗時(shí)的任務(wù)延時(shí)處理,比如發(fā)送郵件,從而大幅度縮短 Web 請(qǐng)求和相應(yīng)的時(shí)間。

驅(qū)動(dòng)的必要設(shè)置

Database //需要數(shù)據(jù)表來存儲(chǔ),可以用artisan生成

php artisan queue:table

php artisan migrate

?Redis

為了使用?redis?隊(duì)列驅(qū)動(dòng),你需要在?config/database.php?配置文件中配置 Redis 的數(shù)據(jù)庫連接。

創(chuàng)建任務(wù)

生成任務(wù)類:php artisan make:job ProcessPodcast? // app/Jobs文件夾下

任務(wù)類__construct 方法 傳遞對(duì)象屬性

任務(wù)類handle方法 處理具體任務(wù)

分發(fā)任務(wù)

一旦你寫完了你的任務(wù)類你就可以使用它自帶的?dispatch?方法分發(fā)它。傳遞給?dispatch?方法的參數(shù)將會(huì)被傳遞給任務(wù)的構(gòu)造函數(shù):

ProcessPodcast::dispatch($podcast);//分發(fā)到配置的default的隊(duì)列中

ProcessPodcast::dispatch($podcast) ->delay(now()->addMinutes(10));//延時(shí)10分鐘發(fā)布

ProcessPodcast::dispatch($podcast)->onQueue('processing');//?分發(fā)任務(wù)到指定隊(duì)列(processing)

ProcessPodcast::dispatch($podcast)->onConnection('sqs');//分發(fā)任務(wù)到指定連接(sqs)

public $tries = 5;//任務(wù)可以嘗試的最大次數(shù)。

?public function retryUntil(){ return now()->addSeconds(5);}/**? 定義任務(wù)超時(shí)時(shí)間 , 在該時(shí)間內(nèi)無限次嘗試*/


運(yùn)行隊(duì)列處理器

php artisan queue:work //監(jiān)聽所有鏈接的default隊(duì)列

php artisan queue:work --once //?執(zhí)行單一任務(wù)

php artisan queue:work redis //?指定連接

php artisan queue:work redis --queue=emails //指定隊(duì)列

php artisan queue:work --queue=high,low //隊(duì)列優(yōu)先級(jí),high 與low 都是隊(duì)列名

php artisan queue:restart // 重啟

php artisan queue:work --sleep=3 //隊(duì)列進(jìn)程睡眠時(shí)間

如果指定非default的隊(duì)列,需要執(zhí)行指定隊(duì)列的命令來運(yùn)行


Supervisor 配置

sudo apt-get install supervisor //linux 安裝

一般 Supervisor 的配置文件存儲(chǔ)在?/etc/supervisor/conf.d?目錄

cd?/etc/supervisor/conf.d?

vim?laravel-worker.conf

//conf文件內(nèi)容

[program:laravel-worker]

process_name=%(program_name)s_%(process_num)02d

command=php /home/forge/app.com/artisan queue:work sqs --sleep=3 --tries=3

autostart=true

autorestart=true

user=forge

numprocs=8

redirect_stderr=true

stdout_logfile=/home/forge/app.com/worker.log

//啟動(dòng)supervisor
sudo supervisorctl reread

sudo supervisorctl update

sudo supervisorctl start laravel-worker:*

sudo supervisorctl reload



處理失敗的任務(wù)

//使用數(shù)據(jù)庫database

php artisan queue:failed-table

php artisan migrate

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容