




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第Laravel隊列使用的實現(xiàn)Laravel是一種類似ThinkPHP的php框架,封裝的諸多功能可以很方便的使用。隊列Queue便是其中之一。
Windows環(huán)境下,可使用PHPstorm作為Laravel的集成開發(fā)環(huán)境IDE。
2隊列
Laravel可配置多種隊列驅(qū)動,包括"sync","database","beanstalkd","sqs","redis","null"(具體參見app/config/queue.php)
其中sync為同步,database為使用數(shù)據(jù)庫,后面三種為第三方隊列服務(wù),最后一種為不使用隊列。
通過在.env中的QUEUE_CONNECTION選項,來決定選擇何種驅(qū)動。
如QUEUE_CONNECTION=database即為選擇數(shù)據(jù)庫驅(qū)動隊列。
3原理
所謂隊列,會有數(shù)據(jù)的生產(chǎn)者和消費者之分。生產(chǎn)者向隊列中投遞數(shù)據(jù),消費者從隊列中獲取數(shù)據(jù)。
比如向用戶發(fā)送郵件的場景:現(xiàn)在有10w封郵件需要發(fā)送,最簡單的,我們需要有一個方法將郵件的收件人、內(nèi)容等,拆分成10w條任務(wù)放在隊列中,同時需要設(shè)置一個回調(diào)方法負責處理每條任務(wù)。當隊列中有郵件發(fā)送任務(wù)時,隊列會主動調(diào)用回調(diào)方法,并傳遞任務(wù)詳情進去。回調(diào)方法處理完成后,單條郵件即發(fā)送完畢。其他郵件依樣處理。
4使用數(shù)據(jù)庫驅(qū)動隊列
4.1生成任務(wù)表
在終端下輸入
phpartisanqueue:table
phpartisanmigrate
在數(shù)據(jù)庫連接正常的情況下,會在數(shù)據(jù)庫中出現(xiàn)jobs表:
[id]bigint
[queue]nvarchar(255)
[payload]nvarchar(max)
[attempts]tinyint
[reserved_at]int
[available_at]int
[created_at]int
4.2創(chuàng)建任務(wù)類
phpartisanmake:jobSendEmail
在終端內(nèi)執(zhí)行上述命令,會自動生成app/Jobs/SendMail.php文件
classSendMailimplementsShouldQueue
在該文件的handle方法中,可以放置任務(wù)處理邏輯。
4.3發(fā)送任務(wù)
在任意位置,均可像下面一樣調(diào)用dispatch發(fā)送任務(wù)
SendMail::dispatch($email);
4.4驅(qū)動隊列
完成上述步驟后,可以在數(shù)據(jù)庫中發(fā)現(xiàn)一條記錄(導(dǎo)出為insertSQL語句):
復(fù)制代碼代碼如下:INSERTINTO[jobs]([id],[queue],[payload],[attempts],[reserved_at],[available_at],[created_at])VALUES(6,N'default',N'{"displayName":"App\\Jobs\\ProcessPodcast","job":"Illuminate\\Queue\\CallQueuedHandler@call","maxTries":null,"timeout":null,"timeoutAt":null,"data":{"commandName":"App\\Jobs\\ProcessPodcast","command":"O:23:\"App\\Jobs\\ProcessPodcast\":8:{s:29:\"\u0000App\\Jobs\\ProcessPodcast\u0000data\";s:6:\"111222\";s:6:\"\u0000*\u0000job\";N;s:10:\"connection\";N;s:5:\"queue\";N;s:15:\"chainConnection\";N;s:10:\"chainQueue\";N;s:5:\"delay\";N;s:7:\"chained\";a:0:{}}"}}',0,NULL,1545980176,1545980176);
此時任務(wù)已經(jīng)放置在數(shù)據(jù)庫內(nèi),只有將隊列運行起來后,隊列才能主動調(diào)用回調(diào)方法。
phpartisanqueue:work
在終端內(nèi)運行上述命令即可。該命令還有諸多參數(shù),如deamon、tries等,可根據(jù)需要指定。
4.5守護進程
為了保證應(yīng)用服務(wù)的穩(wěn)定性,需要開啟守護進程。
Linux下,一般使用Supervisor,Windows下使用Forever
4.6執(zhí)行失敗的處理
對于處理失敗的任務(wù),Laravel也提供的解決方案。通過運行如下命令,即可創(chuàng)建表以記錄失敗任務(wù)。
phpartisanqueue:failed-table
phpartisanmigrate
在數(shù)據(jù)庫中即生成failed_jobs:
[id]bigint
[connection]nvarchar(max)
[queue]nvarchar(max)
[payload]nvarchar(max)
[exception]nvarchar(max)
[failed_at]datetime
導(dǎo)致任務(wù)失敗的Exception會被傳遞到SendMail的failed方法,因而你需要在SendMail中自行實現(xiàn)該方法,并做進一步處理。
任務(wù)執(zhí)行失敗的原因有很多,如傳參錯誤、嘗試次數(shù)超過限制、超時、甚至在handle方法中拋出異常,均會作為失敗任務(wù)處理。
4.7任務(wù)執(zhí)行前后的處理
Laravel提供了任務(wù)執(zhí)行前后的處理入口,即在App/Providers/AppServiceProvider中的boot()中加入如下代碼:
publicfunctionboot()
Queue::before(function(JobProcessing$event){
Log::info("處理任務(wù)前");
Queue::after(function(JobProcessed$event){
Log::info("處理任務(wù)后");
傳遞的$event中,帶有任務(wù)詳情,幾個簡單的例子:
$event-connectionName
$event-job
$event-job-payload()
5使用Redis驅(qū)動隊列
5.1Laravel安裝Predis包
在Laravel中使用Redis之前,需要通過Composer安裝predis/predis包:
composerrequirepredis/predis
上述拓展是幫助Laravel與Redis打交道的,我們現(xiàn)在還缺少Redis服務(wù)。
如果此時將.env中的QUEUE_CONNECTION改為redis,訪問時會報錯:
Predis\Connection\ConnectionException(10061)
[tcp://127.0.0.1:6379]
5.2配置Redis服務(wù)
在Redis官網(wǎng)下載源碼后自行編譯即可。
官方并未提供Windows版,Redis的Windows版式由微軟工作組維護的,你可以從其GitHub頁找到。不過貌似已經(jīng)不再維護了,最新的版本是16年發(fā)布的3.2.100。
Linux下通過簡單的運行
./redis-server
即可開啟服務(wù),再通過
./redis-cli
來嘗試使用Redis。使用也很簡單,就是setkeyvalue和getkey。
Windows下安裝后,在命令行中cd到安裝目錄
C:\ProgramFiles\Redisredis-serverredis.windows.conf
C:\ProgramFiles\Redisnetstat-an
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《T實施與管理》課件
- 小學舞蹈團隊活動方案
- 《黃山的云海課件語文A版》
- 《化學誤差理論》課件
- 煙草包裝設(shè)備的快速更換技術(shù)考核試卷
- 聚己內(nèi)酰胺纖維應(yīng)用考核試卷
- 《血小板減少性疾病的診斷與治療》課件
- 糧食倉儲農(nóng)業(yè)廢棄物利用考核試卷
- 塑料零件在汽車行業(yè)的應(yīng)用考核試卷
- 紡織原料企業(yè)的生產(chǎn)計劃與調(diào)度考核試卷
- 備戰(zhàn)2025年高考英語搶分秘籍(新高考專用)猜押語法填空(話題+體裁)(學生版+解析)
- 船舶與海洋工程2025年相關(guān)知識考試試卷及答案
- 吉林銀行筆試題庫及答案
- 《危險化學品企業(yè)安全生產(chǎn)標準化規(guī)范》專業(yè)深度解讀與應(yīng)用培訓指導(dǎo)材料之8:5管理要求-5.8作業(yè)安全(雷澤佳編制-2025A0)
- 江蘇省南京市、鹽城市2025屆高三年級5月第二次模擬考試英語(南京鹽城二模)
- Unit6Integration(A-C)課件譯林版(2024)英語七年級下冊
- (二模)2024~2025學年度蘇錫常鎮(zhèn)四市高三教學情況調(diào)研(二)物理試卷(含答案)
- 基于深度學習的人臉老化算法研究
- 期貨從業(yè)人員資格2024年筆試考試題庫含答案
- 甘肅開放大學2024年《信息技術(shù)與信息管理》形考作業(yè)1-4答案
- 2024年大學生電子版三方協(xié)議書模板
評論
0/150
提交評論