ThinkPHP5中thinkphp-queue的使用

最近小編收到羣裏面的小夥伴在使用ThinkPHP5.0的框架時,不知道如何使用php-queue(實在尷尬,網上不少這方面的教程)。哈哈,不想參考也不要緊,小編就具體地走一遍吧~~~關於什麼是隊列?隊列的解決什麼?隊列有哪些場景?...等等這些問題,開發者請自行先去了解,還有本案例只針對ThinkPHP框架進行具體操做哦。php

  1. 安裝 thinkphp-queue

     推薦使用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使用,保證進程常駐

 

1.1 命令模式

  • 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

2.2 命令行參數

  • 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 參數,緣由下面會說明

相關文章
相關標籤/搜索