摘要:隊(duì)列的目的是將耗時(shí)的任務(wù)延時(shí)處理,比如發(fā)送郵件,從而大幅度縮短請(qǐng)求和相應(yīng)的時(shí)間。每一種隊(duì)列驅(qū)動(dòng)的配置都可以在該文件中找到,包括數(shù)據(jù)庫,,,,以及同步本地使用驅(qū)動(dòng)。處理完畢后當(dāng)前任務(wù)會(huì)自動(dòng)刪除?;揪拖旅孢@個(gè)樣到此隊(duì)列簡(jiǎn)單配置與使用就結(jié)束了。
概述 什么是隊(duì)列?
百度百科是這樣說的
“隊(duì)列”是在傳輸過程中保存數(shù)據(jù)的容器。
舉幾個(gè)生活中例子:
iphone手機(jī)新款發(fā)布,三里屯iphone進(jìn)的新貨。大家要排隊(duì)買,不能說一大堆人一起沖進(jìn)去,那么這店就完了。
你有一大堆女朋友。你不得一個(gè)一個(gè)來,一起來你也受不了 ?
C語言中堆的概念也是這樣,先進(jìn)先出,不能起個(gè)大早趕個(gè)晚集。
回到正題:
消息隊(duì)列則是為大批量處理數(shù)據(jù)而準(zhǔn)備的一個(gè)概念,他有很多實(shí)現(xiàn)方式,并不是單一的代碼結(jié)構(gòu)。
這里有比較專業(yè)的一篇文章:
http://www.cnblogs.com/xuyata...
還有適合新手揣摩的教程:
http://www.imooc.com/learn/852
廢話說完了,徹底進(jìn)入正題:
Laravel 為我們提供了一個(gè)簡(jiǎn)單并很容易配置的隊(duì)列類.
引用一點(diǎn)官方翻譯的話:
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í)間。隊(duì)列配置文件存放在 config/queue.php。 每一種隊(duì)列驅(qū)動(dòng)的配置都可以在該文件中找到, 包括數(shù)據(jù)庫, Beanstalkd, Amazon SQS, Redis, 以及同步(本地使用)驅(qū)動(dòng)。 其中還包含了一個(gè)null隊(duì)列驅(qū)動(dòng)用于那些放棄隊(duì)列的任務(wù)。
Laravel 在 5.4版本中直接提供了全局函數(shù) dispatch(),你可以再任意地方調(diào)用。并且無需加載任何對(duì)象或者實(shí)例化類。 這個(gè)函數(shù)主要的用途就是將你的隊(duì)列需求加入到指定的容器中(專業(yè)點(diǎn)的叫生產(chǎn)者,其實(shí)你大可理解為你在商城購(gòu)物完排隊(duì)結(jié)賬的時(shí)候)
設(shè)置驅(qū)動(dòng)Laravel神奇數(shù)據(jù)庫遷移我就不多說了。我相信你知道。
php artisan queue:table php artisan migrate
執(zhí)行完上面兩條命令,費(fèi)力打開 configqueue.php, key=default 的數(shù)組中使用env配置文件加載方式,laravel安裝后默認(rèn)為sync(同步),我們需要改為異步(你現(xiàn)在可以暫時(shí)認(rèn)為同步!=隊(duì)列),這里我們選擇使用關(guān)系型數(shù)據(jù)庫來實(shí)現(xiàn)隊(duì)列
QUEUE_DRIVER=database創(chuàng)建任務(wù)
創(chuàng)建任務(wù) = 搞一個(gè)生產(chǎn)者 = (其實(shí)就是寫一個(gè)在隊(duì)列中你想執(zhí)行的業(yè)務(wù)邏輯),名字隨意取,但最好遵守命名規(guī)范
php artisan make:job SendReminderEmail
這個(gè)生成的文件大概分2部分:__construct() 構(gòu)造方法 , handle 隊(duì)列執(zhí)行方法(意思就是在隊(duì)列執(zhí)行的時(shí)候,就用你這里面寫的代碼)
class SendReminderEmail implements ShouldQueue { // 這塊你不用搭理他 use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; protected $name; /** * Create a new job instance. * * @return void */ public function __construct($name) { $this->name = $name; } /** * Execute the job. * * @return void */ public function handle() { DB::table("email")->insert([ "name" => $this->name, "img"=>1, "sort"=>1 ]); } }生產(chǎn)者
隨后在控制器內(nèi)使用dispatch方法調(diào)用即可,下面我則for循環(huán)創(chuàng)建了100個(gè)業(yè)務(wù)
public function index(Request $request) { for ($i = 0; $i <= 100; $i++) { dispatch(new SendReminderEmail("email" . $i)); } }
你通過數(shù)據(jù)遷移的數(shù)據(jù)表中就基本成這樣了
消費(fèi)者 = 隊(duì)列處理 = (你在商城購(gòu)物已經(jīng)開始付錢了),使用下面命令則你開始消費(fèi),隊(duì)列也會(huì)按照你上面的業(yè)務(wù)邏輯開始處理。處理完畢后當(dāng)前任務(wù)會(huì)自動(dòng)刪除。
php artisan queue:work
基本就下面這個(gè)樣
到此Laravel5.4 隊(duì)列簡(jiǎn)單配置與使用就結(jié)束了。
更多專業(yè)吊炸天的教程請(qǐng)參考China Laravel
http://d.laravel-china.org/do...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/25621.html
摘要:已經(jīng)取消了參數(shù),都用來執(zhí)行。取數(shù)據(jù)的過程事物處理已經(jīng)打開。取得符合條件的隊(duì)列后程序會(huì)更新該條數(shù)據(jù),并且更新完后即。 connections => [ .... database => [ driver => database, table => jobs, queue => defaul...
摘要:提供了開箱即用的隊(duì)列服務(wù),隊(duì)列允許您延遲處理耗時(shí)的任務(wù),例如發(fā)送電子郵件,直到稍后的時(shí)間。推遲這些耗時(shí)的任務(wù)會(huì)大大加速您的應(yīng)用程序的請(qǐng)求。 Laravel提供了開箱即用的隊(duì)列服務(wù),隊(duì)列允許您延遲處理耗時(shí)的任務(wù),例如發(fā)送電子郵件,直到稍后的時(shí)間。推遲這些耗時(shí)的任務(wù)會(huì)大大加速您的應(yīng)用程序的Web請(qǐng)求。 一、生成隊(duì)列表 php artisan queue:table php artisan...
摘要:最簡(jiǎn)化權(quán)限管理系統(tǒng),基于開發(fā)?;陂_發(fā),唯一優(yōu)化的是用權(quán)限和路由別名綁定,這樣代碼寫好之后就可以直接使用。如果是超級(jí)管理員,即使沒有這個(gè)權(quán)限會(huì)自動(dòng)賦予權(quán)限給超級(jí)管理員角色。默認(rèn)管理員賬號(hào)密碼。然后正常執(zhí)行命令其他命令即可。 Any 最簡(jiǎn)化權(quán)限管理系統(tǒng),基于 Laravel5.4 開發(fā)。由于 Laravel5.5 發(fā)布推遲,只好先寫個(gè) Laravel5.4版本的,后面再升級(jí)上去。演示地址...
摘要:查找保存下載用搭建自己的緩存?zhèn)}庫權(quán)限管理的好選擇基于封裝的后臺(tái)管理系統(tǒng),支持手機(jī)和端訪問支付寶風(fēng)格的驗(yàn)證器后臺(tái)系統(tǒng)微信接口的部署腳本開發(fā)的博客系統(tǒng)百度推送自動(dòng)記錄用戶行為擴(kuò)展一個(gè)項(xiàng)目管理系統(tǒng)根據(jù)生成對(duì)應(yīng)導(dǎo)航的狀態(tài) 1.debug https://github.com/barryvdh/l... showImg(https://segmentfault.com/img/bVmhWL); ...
摘要:之前的版本用的管理全段資源,版本開始使用的來管理。不過,并不是強(qiáng)制要求在開發(fā)期間使用它。發(fā)布問題標(biāo)題標(biāo)題編輯器容器內(nèi)容發(fā)布問題實(shí)例化編輯器設(shè)置如果沒有預(yù)加載,否則不會(huì)出現(xiàn) Laravel5.4 之前的版本用 gulp 的 laravel-elixir管理全段資源,Laravel5.4 版本開始使用webpack 的 Laravel Mix 來管理。 一、簡(jiǎn)介 Laravel Mix 提...
閱讀 2421·2023-04-25 19:27
閱讀 3531·2021-11-24 09:39
閱讀 3941·2021-10-08 10:17
閱讀 3425·2019-08-30 13:48
閱讀 1964·2019-08-29 12:26
閱讀 3147·2019-08-28 17:52
閱讀 3563·2019-08-26 14:01
閱讀 3559·2019-08-26 12:19