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