溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

ThinkPHP5中thinkphp-queue怎么用

發(fā)布時間:2021-01-16 11:30:19 來源:億速云 閱讀:438 作者:小新 欄目:編程語言

這篇文章主要介紹ThinkPHP5中thinkphp-queue怎么用,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

1、安裝 thinkphp-queue

推薦使用Composer進行安裝,切換到項目的根目錄,執(zhí)行: composer require topthink/think-queue

2、配置消息隊列的存儲環(huán)境

配置文件位于 application\extra\queue.php,如圖:ThinkPHP5中thinkphp-queue怎么用

使用Redis驅(qū)動,如果Redis環(huán)境還沒有安裝,請自行安裝哦,很簡單的,或者也可以使用其他類型驅(qū)動,如圖:ThinkPHP5中thinkphp-queue怎么用

3、任務(wù)的創(chuàng)建

我們在index模塊下,Index.php文件,建立一個名為 queue 的方法(一定要這樣么?當(dāng)然不是,本教程,只是例子,你可以新建模塊,方法名也可以是其他),如圖:

ThinkPHP5中thinkphp-queue怎么用

ThinkPHP5中thinkphp-queue怎么用

4、任務(wù)消息的消費以及刪除處理

我們在 index模塊下創(chuàng)建一個 job 文件,該文件用來處理消費模式,如圖:ThinkPHP5中thinkphp-queue怎么用

在 Demo 這個類下,創(chuàng)建一個 fire 方法,該方法是消息隊列默認(rèn)調(diào)用的方法。如圖:

ThinkPHP5中thinkphp-queue怎么用

以上就是完成任務(wù)的創(chuàng)建--》推送--》消費了。
在瀏覽器或者終端,執(zhí)行一下我們 index/queue.html 方法,就完成創(chuàng)建以及推送了,關(guān)于任務(wù)消費,可以參考一下命令,在終端切換到項目的根目錄:

5、監(jiān)聽任務(wù)并執(zhí)行

php think queue:listen
php think queue:work –daemon(不加–daemon為執(zhí)行單個任務(wù))

兩種,具體的可選參數(shù)可以輸入命令加 –help 查看

可配合supervisor使用,保證進程常駐

1.1 命令模式
  • queue:subscribe 命令 [截至2017-02-15,作者暫未實現(xiàn)該模式,略過]

  • queue:work 命令

    work 命令: 該命令將啟動一個 work 進程來處理消息隊列。

    php think queue:work --queue helloJobQueue
  • queue:listen 命令

    listen 命令: 該命令將會創(chuàng)建一個 listen 父進程 ,然后由父進程通過 proc_open(‘php think queue:work’) 的方式來創(chuàng)建一個work 子 進程來處理消息隊列,且限制該work進程的執(zhí)行時間。

    php think queue:listen --queue helloJobQueue
2.2 命令行參數(shù)
  • Work 模式

    php think queue:work \
    --daemon            //是否循環(huán)執(zhí)行,如果不加該參數(shù),則該命令處理完下一個消息就退出
    --queue  helloJobQueue  //要處理的隊列的名稱
    --delay  0 \        //如果本次任務(wù)執(zhí)行拋出異常且任務(wù)未被刪除時,設(shè)置其下次執(zhí)行前延遲多少秒,默認(rèn)為0
    --force  \          //系統(tǒng)處于維護狀態(tài)時是否仍然處理任務(wù),并未找到相關(guān)說明
    --memory 128 \      //該進程允許使用的內(nèi)存上限,以 M 為單位
    --sleep  3 \        //如果隊列中無任務(wù),則sleep多少秒后重新檢查(work+daemon模式)或者退出(listen或非daemon模式)
    --tries  2          //如果任務(wù)已經(jīng)超過嘗試次數(shù)上限,則觸發(fā)‘任務(wù)嘗試次數(shù)超限’事件,默認(rèn)為0
  • Listen 模式

    php think queue:listen \
    --queue  helloJobQueue \   //監(jiān)聽的隊列的名稱
    --delay  0 \         //如果本次任務(wù)執(zhí)行拋出異常且任務(wù)未被刪除時,設(shè)置其下次執(zhí)行前延遲多少秒,默認(rèn)為0
    --memory 128 \       //該進程允許使用的內(nèi)存上限,以 M 為單位
    --sleep  3 \         //如果隊列中無任務(wù),則多長時間后重新檢查,daemon模式下有效
    --tries  0 \         //如果任務(wù)已經(jīng)超過重發(fā)次數(shù)上限,則進入失敗處理邏輯,默認(rèn)為0
    --timeout 60         //創(chuàng)建的work子進程的允許執(zhí)行的最長時間,以秒為單位

    可以看到 listen 模式下,不包含 --deamon 參數(shù),原因下面會說明

Linux啟動守護進程,以tp5為例子

nohup php think queue:work --daemon --queue 任務(wù)名稱 &
 nohup php think queue:work --daemon --queue 任務(wù)名稱 &

在Linux查看任務(wù)數(shù)量,可以在終端輸入:jobs -l

ThinkPHP5中thinkphp-queue怎么用

以上是“ThinkPHP5中thinkphp-queue怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI