亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

Laravel 隊列使用的實現

2024-05-05 00:06:09
字體:
來源:轉載
供稿:網友

1 環境

Laravel是一種類似ThinkPHP的php框架,封裝的諸多功能可以很方便的使用。隊列Queue便是其中之一。

Windows環境下,可使用PHPstorm作為Laravel的集成開發環境IDE。

2 隊列

Laravel可配置多種隊列驅動,包括 "sync", "database", "beanstalkd", "sqs", "redis", "null"(具體參見app/config/queue.php)
其中sync為同步,database為使用數據庫,后面三種為第三方隊列服務,最后一種為不使用隊列。

通過在 .env 中的 QUEUE_CONNECTION 選項,來決定選擇何種驅動。

如 QUEUE_CONNECTION=database 即為選擇數據庫驅動隊列。

3 原理

所謂隊列,會有數據的生產者和消費者之分。生產者向隊列中投遞數據,消費者從隊列中獲取數據。

比如向用戶發送郵件的場景:現在有10w封郵件需要發送,最簡單的,我們需要有一個方法將郵件的收件人、內容等,拆分成10w條任務放在隊列中,同時需要設置一個回調方法負責處理每條任務。當隊列中有郵件發送任務時,隊列會主動調用回調方法,并傳遞任務詳情進去?;卣{方法處理完成后,單條郵件即發送完畢。其他郵件依樣處理。

4 使用數據庫驅動隊列

4.1 生成任務表

在終端下輸入

php artisan queue:tablephp artisan migrate

在數據庫連接正常的情況下,會在數據庫中出現jobs表:

 [id] bigint  [queue] nvarchar(255)  [payload] nvarchar(max)  [attempts] tinyint  [reserved_at] int  [available_at] int  [created_at] int 

4.2 創建任務類

php artisan make:job SendEmail

在終端內執行上述命令,會自動生成 app/Jobs/SendMail.php 文件

class SendMail implements ShouldQueue

在該文件的handle方法中,可以放置任務處理邏輯。

4.3 發送任務

在任意位置,均可像下面一樣調用 dispatch 發送任務

SendMail::dispatch($email);

4.4 驅動隊列

完成上述步驟后,可以在數據庫中發現一條記錄(導出為insert SQL語句):

 

復制代碼代碼如下:
INSERT INTO [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);

 

此時任務已經放置在數據庫內,只有將隊列運行起來后,隊列才能主動調用回調方法。

php artisan queue:work

在終端內運行上述命令即可。該命令還有諸多參數,如deamon、tries等,可根據需要指定。

4.5 守護進程

為了保證應用服務的穩定性,需要開啟守護進程。

Linux下,一般使用 Supervisor ,Windows下使用 Forever

4.6 執行失敗的處理

對于處理失敗的任務,Laravel也提供的解決方案。通過運行如下命令,即可創建表以記錄失敗任務。

php artisan queue:failed-tablephp artisan migrate

在數據庫中即生成 failed_jobs :

 [id] bigint [connection] nvarchar(max) [queue] nvarchar(max)  [payload] nvarchar(max)  [exception] nvarchar(max)  [failed_at] datetime

導致任務失敗的 Exception 會被傳遞到 SendMail 的 failed 方法,因而你需要在SendMail中自行實現該方法,并做進一步處理。

任務執行失敗的原因有很多,如傳參錯誤、嘗試次數超過限制、超時、甚至在 handle 方法中拋出異常,均會作為失敗任務處理。

4.7 任務執行前后的處理

Laravel提供了任務執行前后的處理入口,即在 App/Providers/AppServiceProvider 中的 boot() 中加入如下代碼:

public function boot(){   Queue::before( function (JobProcessing $event) {     Log::info("處理任務前");   });   Queue::after( function (JobProcessed $event) {     Log::info("處理任務后");   });}

傳遞的 $event 中,帶有任務詳情,幾個簡單的例子:

$event->connectionName$event->job$event->job->payload()

5 使用 Redis 驅動隊列

5.1 Laravel 安裝 Predis 包

在 Laravel 中使用 Redis 之前,需要通過 Composer 安裝 predis/predis 包:

composer require predis/predis

上述拓展是幫助Laravel與Redis打交道的,我們現在還缺少Redis服務。

如果此時將 .env 中的 QUEUE_CONNECTION 改為 redis,訪問時會報錯:

Predis / Connection / ConnectionException (10061)
??????????????????????????? [tcp://127.0.0.1:6379]

5.2 配置 Redis 服務

Redis官網 下載源碼后自行編譯即可。

官方并未提供Windows版,Redis的Windows版式由微軟工作組維護的,你可以從其GitHub頁 找到。不過貌似已經不再維護了,最新的版本是16年發布的3.2.100。

Linux下通過簡單的運行

./redis-server

即可開啟服務,再通過

./redis-cli

來嘗試使用Redis。使用也很簡單,就是 set key value 和 get key。
Windows下安裝后,在命令行中 cd 到安裝目錄

C:/Program Files/Redis>redis-server redis.windows.confC:/Program Files/Redis>netstat -an|find "6379" TCP  127.0.0.1:6379     0.0.0.0:0       LISTENING

即可開啟Redis服務。

Redis服務的停止是通過如下命令:

C:/Program Files/Redis>redis-server --service-stop

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产97在线亚洲| 国产欧美在线观看| 91精品国产色综合久久不卡98| www国产精品视频| 成人激情视频在线观看| 一级做a爰片久久毛片美女图片| 久久综合电影一区| 91亚洲精品久久久| 中文精品99久久国产香蕉| 日韩中文字幕国产| 欧美在线视频播放| 国产亚洲精品va在线观看| 国产成人精品a视频一区www| 国产精品av在线| 成人国产精品av| 亚洲国产精品嫩草影院久久| 成人性生交大片免费看视频直播| 欧美夜福利tv在线| 91av成人在线| 久久久久久久色| 欧美午夜久久久| 亚洲a成v人在线观看| 精品视频在线导航| 国内精品久久久久久久久| 狠狠做深爱婷婷久久综合一区| 欧美激情视频一区二区| 日本韩国在线不卡| 欧美一级黑人aaaaaaa做受| 国产精品一区二区久久久| 亚洲18私人小影院| 一本色道久久综合狠狠躁篇怎么玩| 日韩精品极品视频免费观看| 色播久久人人爽人人爽人人片视av| 影音先锋欧美精品| 日韩精品在线观看网站| 久久91亚洲人成电影网站| 日韩av不卡电影| 欧美限制级电影在线观看| 国产精品av免费在线观看| 日韩专区中文字幕| 日本一区二区不卡| 成人xxxx视频| 色www亚洲国产张柏芝| 精品伊人久久97| 日韩中文字幕在线观看| 亚洲国产精品久久| 国产精品国产三级国产aⅴ浪潮| 色婷婷av一区二区三区在线观看| 在线日韩中文字幕| 成人日韩在线电影| 国产亚洲欧美日韩一区二区| 国产日韩中文在线| 北条麻妃一区二区三区中文字幕| 国内精品400部情侣激情| 亚洲成色www8888| 国产精品入口夜色视频大尺度| 欧美亚洲日本网站| 欧美高清videos高潮hd| 欧美性猛交xxxx黑人猛交| 色一情一乱一区二区| 久久久久久久久网站| 不卡毛片在线看| 成人性教育视频在线观看| 欧美在线免费看| 欧美性猛交xxx| 日av在线播放中文不卡| 欧美极品美女视频网站在线观看免费| 中文字幕国产精品| 国产成人综合av| 日本精品久久久久久久| 久久久久久国产精品美女| 日韩在线视频免费观看高清中文| 欧美精品精品精品精品免费| 美女av一区二区三区| 久久久久久69| 久久久久久91香蕉国产| 日韩精品在线播放| 国产欧美日韩精品专区| 亚洲综合中文字幕在线观看| 亚洲欧美精品suv| 国产精品福利在线观看网址| 国产香蕉97碰碰久久人人| 日韩成人在线播放| 奇门遁甲1982国语版免费观看高清| 国内免费久久久久久久久久久| 久久91亚洲精品中文字幕| 亚洲精品电影久久久| 播播国产欧美激情| 一区二区三区天堂av| 黑人极品videos精品欧美裸| 日韩成人黄色av| 国产成人一区二区在线| 97视频在线观看免费高清完整版在线观看| 色婷婷综合久久久久中文字幕1| 91精品国产亚洲| 亚洲欧美在线播放| 中文字幕在线看视频国产欧美| 欧美电影第一页| 国产色综合天天综合网| 免费成人高清视频| 日韩av电影手机在线| 精品一区二区三区电影| 色伦专区97中文字幕| 国产日韩av在线播放| 久久视频国产精品免费视频在线| 亚洲福利视频二区| 亚洲国产精品成人va在线观看| 97国产suv精品一区二区62| 欧美高清在线视频观看不卡| 久久免费成人精品视频| 美日韩精品免费观看视频| 久久中文精品视频| 久久久久国产精品www| 中国日韩欧美久久久久久久久| 久久男人资源视频| 91免费精品国偷自产在线| 日本精品一区二区三区在线| 久久久精品视频成人| 久久精品视频免费播放| 亚洲春色另类小说| 久久国产精品视频| 亚洲第一网站免费视频| www.日韩免费| 日韩专区在线播放| 久久综合久久88| 国产一区二区日韩精品欧美精品| 国产精品成人aaaaa网站| 国产精品久久久久久久久久久久久| 欧美超级免费视 在线| 中文欧美日本在线资源| 久久久久久亚洲| 欧美日韩国产限制| 欧美激情奇米色| 欧美精品日韩三级| 欧美日韩一区二区三区在线免费观看| 成人伊人精品色xxxx视频| 国产精品免费一区二区三区都可以| 97人人爽人人喊人人模波多| 日日狠狠久久偷偷四色综合免费| 亚洲美女自拍视频| 日韩国产精品视频| 欧美极品欧美精品欧美视频| 狠狠久久亚洲欧美专区| 久久99视频免费| 欧美成人免费全部| 欧美肥老妇视频| 亚洲精品国产成人| 欧美做受高潮1| 午夜欧美不卡精品aaaaa| 午夜精品久久久久久久白皮肤| 7m精品福利视频导航| 国产女精品视频网站免费| 欧美日本中文字幕| 国产精品99一区| 亚洲视频日韩精品| 尤物精品国产第一福利三区| 精品久久久久久久中文字幕| 尤物99国产成人精品视频| 国产精品视频在线观看| 欧美中文字幕视频| 久久男人av资源网站| 国产99久久精品一区二区| 国产精品美女午夜av| 亚洲xxxxx电影|