最近小編收到羣裏面的小夥伴在使用ThinkPHP5.0的框架時,不知道如何使用php-queue(實在尷尬,網上不少這方面的教程)。哈哈,不想參考也不要緊,小編就具體地走一遍吧~~~關於什麼是隊列?隊列的解決什麼?隊列有哪些場景?...等等這些問題,開發者請自行先去了解,還有本案例只針對ThinkPHP框架進行具體操做哦。php
推薦使用Composer進行安裝,切換到項目的根目錄,執行: composer require topthink/think-queuehtml
2. 配置消息隊列的存儲環境thinkphp
配置文件位於 application\extra\queue.php,如圖:瀏覽器
使用Redis驅動,若是Redis環境尚未安裝,請自行安裝哦,很簡單的,或者也可使用其餘類型驅動,如圖:app
3. 任務的建立composer
咱們在index模塊下,Index.php文件,創建一個名爲 queue 的方法(必定要這樣麼?固然不是,本教程,只是例子,你能夠新建模塊,方法名也能夠是其餘),如圖:框架
4. 任務消息的消費以及刪除處理ui
咱們在 index模塊下建立一個 job 文件,該文件用來處理消費模式,如圖:spa
在 Demo 這個類下,建立一個 fire 方法,該方法是消息隊列默認調用的方法。如圖:命令行
以上就是完成任務的建立--》推送--》消費了。
在瀏覽器或者終端,執行一下咱們 index/queue.html 方法,就完成建立以及推送了,關於任務消費,能夠參考一下命令,在終端切換到項目的根目錄:
5. 監放任務並執行
php think queue:listen
php think queue:work –daemon(不加–daemon爲執行單個任務)
兩種,具體的可選參數能夠輸入命令加 –help 查看
可配合supervisor使用,保證進程常駐
queue:subscribe 命令 [截至2017-02-15,做者暫未實現該模式,略過]
queue:work 命令
work 命令: 該命令將啓動一個 work 進程來處理消息隊列。
php think queue:work --queue helloJobQueue
queue:listen 命令
listen 命令: 該命令將會建立一個 listen 父進程 ,而後由父進程經過 proc_open(‘php think queue:work’)
的方式來建立一個work 子 進程來處理消息隊列,且限制該work進程的執行時間。
php think queue:listen --queue helloJobQueue
Work 模式
php think queue:work \ --daemon //是否循環執行,若是不加該參數,則該命令處理完下一個消息就退出 --queue helloJobQueue //要處理的隊列的名稱 --delay 0 \ //若是本次任務執行拋出異常且任務未被刪除時,設置其下次執行前延遲多少秒,默認爲0 --force \ //系統處於維護狀態時是否仍然處理任務,並未找到相關說明 --memory 128 \ //該進程容許使用的內存上限,以 M 爲單位 --sleep 3 \ //若是隊列中無任務,則sleep多少秒後從新檢查(work+daemon模式)或者退出(listen或非daemon模式) --tries 2 //若是任務已經超過嘗試次數上限,則觸發‘任務嘗試次數超限’事件,默認爲0
Listen 模式
php think queue:listen \ --queue helloJobQueue \ //監聽的隊列的名稱 --delay 0 \ //若是本次任務執行拋出異常且任務未被刪除時,設置其下次執行前延遲多少秒,默認爲0 --memory 128 \ //該進程容許使用的內存上限,以 M 爲單位 --sleep 3 \ //若是隊列中無任務,則多長時間後從新檢查,daemon模式下有效 --tries 0 \ //若是任務已經超太重發次數上限,則進入失敗處理邏輯,默認爲0 --timeout 60 //建立的work子進程的容許執行的最長時間,以秒爲單位
能夠看到 listen 模式下,不包含 --deamon
參數,緣由下面會說明