首頁 >php框架 >ThinkPHP >你會使用ThinkPHP5中thinkphp-queue嗎?

你會使用ThinkPHP5中thinkphp-queue嗎?

藏色散人
藏色散人轉載
2020-07-17 13:23:296144瀏覽

下面由thinkphp框架教學專欄為大家介紹使用ThinkPHP5中thinkphp-queue的方法,希望對需要的朋友有幫助!

你會使用ThinkPHP5中thinkphp-queue嗎?

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

1、安裝thinkphp-queue

     建議使用Composer進行安裝,切換到專案的根目錄,執行: composer require topthink/think-queue

##2、設定訊息佇列的儲存環境

    設定檔位於application\extra\queue.php,如圖:你會使用ThinkPHP5中thinkphp-queue嗎?

使用Redis驅動,如果Redis環境還沒安裝,請自行安裝哦,很簡單的,或者也可以使用其他類型驅動,如圖:你會使用ThinkPHP5中thinkphp-queue嗎?

3、任務的創建

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

你會使用ThinkPHP5中thinkphp-queue嗎?

你會使用ThinkPHP5中thinkphp-queue嗎?

 4、任務訊息的消費以及刪除處理

我們在index模組下建立一個job 文件,該文件用來處理消費模式,如圖:你會使用ThinkPHP5中thinkphp-queue嗎?

在Demo 這個類別下,建立一個fire 方法,該方法是訊息佇列預設呼叫的方法。如圖:

你會使用ThinkPHP5中thinkphp-queue嗎?

以上就是完成任務的創建--》推送--》消費了。
在瀏覽器或終端,執行一下我們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 參數,原因下方會說明

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

nohup php think queue:work --daemon --queue 任务名称 &
 nohup php think queue:work --daemon --queue 任务名称 &

在Linux查看任務數量,可以在終端輸入:jobs -l

你會使用ThinkPHP5中thinkphp-queue嗎?

以上是你會使用ThinkPHP5中thinkphp-queue嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:oschina.net。如有侵權,請聯絡admin@php.cn刪除