摘要:幾小時(shí)前剛剛發(fā)布的為隊(duì)列功能提供了官方原生的驅(qū)動(dòng)器,完全取代了本軟件包的功能。不過(guò)這也并不意味著就是虛擬主機(jī)沒(méi)戲,必須云主機(jī)起跳的小網(wǎng)站殺手。性能確實(shí)低下受制于,絕對(duì)禁止用于大數(shù)量高密度任務(wù)的場(chǎng)合。虛擬主機(jī)肯定不會(huì)提供。
幾小時(shí)前剛剛發(fā)布的 Larevel 5.0 為隊(duì)列功能提供了官方原生的database驅(qū)動(dòng)器,完全取代了本軟件包的功能。
對(duì)于Laravel 5及以上版本,本文的內(nèi)容及所涉軟件包均已失效,請(qǐng)勿實(shí)踐。未來(lái)也不會(huì)再有l5mysqlqueue軟件包。
shamiao/l4mysqlqueue軟件包完成了他的使命。我們永遠(yuǎn)懷念他。
沙渺,2015年2月4日。
laravel 4是一個(gè)高度依賴(lài)包管理器與命令行界面的php框架。不使用composer和php artisan兩個(gè)工具幾乎寸步難行?!贿^(guò)這也并不意味著laravel就是虛擬主機(jī)沒(méi)戲,必須VPS/云主機(jī)起跳的“小網(wǎng)站殺手”。
其實(shí)在cPanel虛擬主機(jī)上,部署laravel并不是那么難的事情,因?yàn)槿蚀鹊腸Panel面板,一般都開(kāi)放有操作Linux原生cron jobs的設(shè)置頁(yè)面。
只要有了cron這個(gè)口子,就可以獲得執(zhí)行命令行任務(wù)的機(jī)會(huì),每分鐘1次——這已經(jīng)足夠了。
但是實(shí)際使用中發(fā)現(xiàn),laravel的其他功能都沒(méi)毛病,就是異步隊(duì)列根本不能用。考察laravel提供的原生異步隊(duì)列驅(qū)動(dòng)器,沒(méi)有一個(gè)適合在虛擬主機(jī)環(huán)境中使用:
同步(sync):只是殘廢的調(diào)試工具
Beanstalkd:虛擬主機(jī)不會(huì)有
Redis:虛擬主機(jī)不會(huì)有
IronMQ:要美元
Amazon SQS:要美元
我考慮了很多方案(包括一些很土炮的餿主意),最終還是遵守了laravel的哲學(xué)[注A],寫(xiě)了一個(gè)原生的MySQL隊(duì)列驅(qū)動(dòng)器。
原理就是數(shù)據(jù)庫(kù)一張表。加入任務(wù)時(shí)寫(xiě)入,執(zhí)行任務(wù)時(shí)檢索,需要?jiǎng)h除時(shí)打標(biāo)記(軟刪除)。
即使使用Queue::later()推遲任務(wù),任務(wù)信息也會(huì)立刻寫(xiě)入表格,而不設(shè)計(jì)“主動(dòng)推遲一定時(shí)間再寫(xiě)入”的復(fù)雜。表格中記錄有任務(wù)的執(zhí)行時(shí)刻,沒(méi)到時(shí)間的任務(wù)會(huì)在檢索時(shí)被自然忽略。
性能確實(shí)低下(受制于MySQL),絕對(duì)禁止用于大數(shù)量、高密度任務(wù)的場(chǎng)合。但是部署極其簡(jiǎn)易,所以很適合小網(wǎng)站、偶發(fā)性、時(shí)效性不強(qiáng)的異步任務(wù)。
特點(diǎn)100%完整實(shí)現(xiàn),Laravel文檔規(guī)定的用法全部支持。具體而言:
支持原生的queue:listen, queue:work等 artisan 隊(duì)列操作
不在 artisan 上畫(huà)蛇添足去定義額外的命令
支持記錄重試次數(shù),正確對(duì)接laravel的失敗任務(wù)回收系統(tǒng)
支持任意多個(gè)隊(duì)列,支持自定義默認(rèn)隊(duì)列名稱(chēng)
只占用1個(gè)數(shù)據(jù)表,支持自定義表名,允許數(shù)據(jù)庫(kù)有表前綴
不使用Eloquent ORM
安裝composer.json 增加以下依賴(lài)包,并做 composer update [注B]:
"shamiao/l4mysqlqueue": "~1.0"
編輯 config/app.php 增加 provider 條目:
"ShamiaoL4mysqlqueueL4mysqlqueueServiceProvider"
編輯 config/queue.php 設(shè)置隊(duì)列驅(qū)動(dòng)器:
"default" => "mysql", // 這個(gè)是連接名,隨意。慣例是寫(xiě)成和驅(qū)動(dòng)器同名的"mysql" "mysql" => array( // 這個(gè)和"default"右邊那個(gè)一致就好 "driver" => "mysql", // 驅(qū)動(dòng)器名,這里就必須寫(xiě)成"mysql"了! "queue" => "default", // 如有需要,可以指定默認(rèn)隊(duì)列名,推薦直接刪去不寫(xiě) "table" => "queue"," // 如有需要,可以指定表格名,推薦直接刪去不寫(xiě) ),
最后把本軟件包(package)附帶的遷移操作(migrations)并入數(shù)據(jù)庫(kù)[注C]:
php artisan migrate --package="shamiao/l4mysqlqueue"使用
沒(méi)什么好說(shuō)的。這個(gè)驅(qū)動(dòng)器對(duì)用戶(hù)而言是透明的,所以L(fǎng)aravel文檔的Queue頁(yè)面怎么說(shuō)就可以怎么做。
是完整實(shí)現(xiàn),所以文檔中提到的功能全都沒(méi)有禁忌。
如果在虛擬主機(jī)環(huán)境下,運(yùn)行一個(gè)必須持續(xù)跑著的 queue:listen 或 queue:work --daemon 不方便,也可以像這樣利用cron來(lái)變通的執(zhí)行[注D]:
* * * * * ( cd /home/username/your/laravel/dir; php artisan queue:work --tries=3 )
當(dāng)然代價(jià)就是每分鐘只能執(zhí)行一個(gè)任務(wù)了。
注意刪除任務(wù)時(shí)只打標(biāo)記做軟性刪除,所以數(shù)據(jù)表queue必然只膨脹不減小。請(qǐng)記得自擬計(jì)劃,在負(fù)載不高時(shí)把status = "deleted"的任務(wù)真正的DELETE掉。
很多實(shí)現(xiàn)還會(huì)調(diào)整,如有任何變化請(qǐng)以GitHub說(shuō)明為準(zhǔn)。
鏈接From GitHub and Composer with love:
https://github.com/shamiao/l4mysqlqueue
https://packagist.org/packages/shamiao/l4mysqlqueue
本項(xiàng)目代碼均為獨(dú)立,開(kāi)發(fā)過(guò)程受到過(guò)兩個(gè)不完善實(shí)現(xiàn) barryvdh/laravel-async-queue 和 octoberrain/cron 的啟發(fā)。
注釋A:①要藝術(shù),不要把代碼寫(xiě)的很“臟”。 ②接口遍地都是,有需要,就擴(kuò)展。
B: 虛擬主機(jī)肯定不會(huì)提供composer。你需要自己下載composer.phar,放到主文件夾下邊,然后執(zhí)行php /home/username/composer.phar update。
C: 根據(jù)主機(jī)環(huán)境不同,可能部分主機(jī)要用php5代替php,也可能有部分主機(jī)沒(méi)有PATH變量,必須手動(dòng)打/usr/bin/php完整路徑。
D:不妨寫(xiě)成.sh腳本文件并設(shè)置權(quán)限755,這樣在cron job里只需要指定腳本完整路徑即可,日后修改也方便。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/31873.html
摘要:此問(wèn)題稱(chēng)為查詢(xún)問(wèn)題。您將只執(zhí)行兩個(gè)查詢(xún)而不是這是巨大的性能提升。這項(xiàng)工作是通過(guò)從數(shù)據(jù)庫(kù)中執(zhí)行查詢(xún)完成的查詢(xún)可能涉及到表以及其他的一些表。比如查詢(xún),視圖,時(shí)間等等另一個(gè)非常酷的工具是,對(duì)應(yīng)用,有優(yōu)雅的調(diào)試助手的美稱(chēng)。 showImg(https://segmentfault.com/img/remote/1460000018339917?w=1280&h=722); 讓我們開(kāi)始吧!假若你...
摘要:已經(jīng)取消了參數(shù),都用來(lái)執(zhí)行。取數(shù)據(jù)的過(guò)程事物處理已經(jīng)打開(kāi)。取得符合條件的隊(duì)列后程序會(huì)更新該條數(shù)據(jù),并且更新完后即。 connections => [ .... database => [ driver => database, table => jobs, queue => defaul...
摘要:的現(xiàn)狀目前是版本,是基于開(kāi)發(fā)。入口文件啟動(dòng)文件和配置文件框架的入口文件是。在路由中指定控制器類(lèi)必須寫(xiě)全命名空間,不然會(huì)提示找不到類(lèi)。目前支持四種數(shù)據(jù)庫(kù)系統(tǒng)以及。使用時(shí)發(fā)生錯(cuò)誤,因?yàn)樵谖募?,的默認(rèn)驅(qū)動(dòng)是。 最近使用 Lumen 做了 2 個(gè)業(yè)余項(xiàng)目,特此記錄和分享一下。 Lumen 的介紹 在使用一項(xiàng)新的技術(shù)時(shí),了解其應(yīng)用場(chǎng)景是首要的事情。 Lumen 的口號(hào):為速度而生的 La...
摘要:輕量級(jí)框架是一個(gè)輕量級(jí)框架,包含多維數(shù)據(jù)分析和瀏覽聚合數(shù)據(jù)等工具。創(chuàng)造矢量地圖的輕量級(jí)框架是一個(gè)庫(kù),用來(lái)為生成地圖。異步非阻塞的框架的全稱(chēng)是,傳說(shuō)中性能高高的框架。 如果你正在學(xué)習(xí)python,那么這10個(gè)開(kāi)源框架,你可千萬(wàn)別錯(cuò)過(guò),這些框架包括事件I/O,OLAP,Web開(kāi)發(fā),高性能網(wǎng)絡(luò)通信,測(cè)試,爬蟲(chóng)等。雖說(shuō)不上是全都有,但也足夠滿(mǎn)足你了。 1.Django: Python Web應(yīng)...
摘要:對(duì)于來(lái)說(shuō),在主機(jī)操作系統(tǒng)上運(yùn)行是絕對(duì)必要的。在和中,從主機(jī)操作系統(tǒng)中運(yùn)行可以出現(xiàn)系統(tǒng)通知。你仍然可以在或的虛擬機(jī)中成功地運(yùn)行,但在發(fā)出通知時(shí)將收到警告錯(cuò)誤僅從你的主機(jī)操作系統(tǒng)運(yùn)行。 原文地址: Laravel 5.1 Beauty - Required Software and Components 怎樣安裝開(kāi)發(fā) Laravel 5.1 必要的軟件: VirtualBox 和 Vagr...
閱讀 3747·2021-09-22 15:28
閱讀 1360·2021-09-03 10:35
閱讀 943·2021-09-02 15:21
閱讀 3549·2019-08-30 15:53
閱讀 3548·2019-08-29 17:25
閱讀 630·2019-08-29 13:22
閱讀 1612·2019-08-28 18:15
閱讀 2352·2019-08-26 13:57