真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ThinkPHP怎么使用think-queue實(shí)現(xiàn)redis消息隊(duì)列

本篇內(nèi)容主要講解“ThinkPHP怎么使用think-queue實(shí)現(xiàn)redis消息隊(duì)列”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“ThinkPHP怎么使用think-queue實(shí)現(xiàn)redis消息隊(duì)列”吧!

為白云鄂等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及白云鄂網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為做網(wǎng)站、成都網(wǎng)站建設(shè)、白云鄂網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

簡(jiǎn)單介紹:

消息隊(duì)列中間件是大型系統(tǒng)中的重要組件,已經(jīng)逐漸成為企業(yè)系統(tǒng)內(nèi)部通信的核心手段。它具有松耦合、異步消息、流量削峰、可靠投遞、廣播、流量控制、最終一致性等一系列功能,已經(jīng)成為異步RPC的主要手段之一。

大白話:

消息隊(duì)列有兩個(gè)角色和一個(gè)容器,角色分別為生產(chǎn)者(負(fù)責(zé)發(fā)布任務(wù))和消費(fèi)者(負(fù)責(zé)執(zhí)行任務(wù)),容器這是用來(lái)存放/堆積生產(chǎn)者發(fā)布的任務(wù),將發(fā)布和執(zhí)行兩個(gè)步驟分開且互不影響。

消息隊(duì)列的大致流程為:

生產(chǎn)者發(fā)布任務(wù)存放/堆積在消息隊(duì)列中,由消費(fèi)者主動(dòng)去消息隊(duì)列中取出任務(wù)并執(zhí)行,先發(fā)布的先執(zhí)行(隊(duì)列:先進(jìn)先出),在沒有消費(fèi)者的情況下任務(wù)會(huì)堆積在隊(duì)列中等待被取出執(zhí)行。

優(yōu)點(diǎn):

消息隊(duì)列適用于大并發(fā)或者處理時(shí)間長(zhǎng)并需要批量操作的第三方接口,可用于但不僅限于短信發(fā)送、郵件發(fā)送、APP推送等,支持跨系統(tǒng),即本系統(tǒng)發(fā)布的消息隊(duì)列可以由自己或者給其他系統(tǒng)執(zhí)行任務(wù),同理本系統(tǒng)也可以作為消費(fèi)者執(zhí)行自己或者其他系統(tǒng)發(fā)布的消息隊(duì)列任務(wù)。


接下來(lái)主要介紹一下 think-queue 的使用

ThinkPHP的Queue內(nèi)置了 Redis、Database、Topthink、Sync四種驅(qū)動(dòng),這里使用的是 Redis,也推薦使用 Redis

think-queue 隊(duì)列消息可以進(jìn)行任務(wù)的發(fā)布、獲取、執(zhí)行、刪除、重新發(fā)布、延遲發(fā)布、超時(shí)控制等操作

消息隊(duì)列基本配置

在 extra 目錄下創(chuàng)建 queue.php 配置文件

 'Redis',
    'expire'     => null,   // 任務(wù)過(guò)期時(shí)間,默認(rèn)為60秒,若要禁用,則設(shè)置為 null
    'default'    => 'REDIS_QUEUE',  // 默認(rèn)的隊(duì)列名
    'host'       => '127.0.0.1',   // redis 主機(jī)ip
    'port'       => 6379,   // redis 端口
    'password'   => '',   // redis 密碼
    'select'     => 0,   // 使用哪里一個(gè) db,默認(rèn)為 db0
    'timeout'    => 0,   // redis 連接的超時(shí)時(shí)間
    'persistent' => false,   // 是否是長(zhǎng)連接];

至于為什么放在這里,是因?yàn)?Queue 源代碼默認(rèn)從 extra 讀取 queue 文件獲取配置信息,如果想要將配置文件放置其他地方,則需要對(duì)應(yīng)去修改源代碼中的默認(rèn)獲取配置

生產(chǎn)者

創(chuàng)建一個(gè)測(cè)試類,寫入生產(chǎn)者方法

 rand(0, 99),
            'userName' => '一起摸魚'
        ];

        // 消息隊(duì)列名
        $queueName = 'testQueue';

        // 推入消息隊(duì)列,注意這里的 ::class 是PHP5.5才有的寫法
        $isPushed = Queue::push(TestQueue::class, $data, $queueName);
		// PHP5.5以下的可以直接寫命名空間
        // $isPushed = Queue::push('app\common\queue\TestQueue', $data, $queueName);
        
        if ($isPushed !== false) {
            // 成功之后的業(yè)務(wù)
            echo '隊(duì)列加入成功';
        } else {
            // 失敗之后的業(yè)務(wù)
            echo '隊(duì)列加入失敗';
        }
    }}

消費(fèi)者

創(chuàng)建一個(gè) TestQueue 類,用做消費(fèi)者,執(zhí)行消息隊(duì)列中的任務(wù)

doJob($data);
        
        if ($isJobDone) {
            // 消息隊(duì)列執(zhí)行成功,刪除隊(duì)列,否則會(huì)一直執(zhí)行
            $job->delete();
        } else {
            // 消息隊(duì)列執(zhí)行失敗
            // 獲取消息隊(duì)列已經(jīng)重試了幾遍
            $attempts = $job->attempts();
            if ($attempts == 0 || $attempts == 1) {
                // 重新發(fā)布,參數(shù) delay 是延時(shí)發(fā)布的時(shí)間
                $job->release(2);
            }
        }
    }

    // 消息隊(duì)列執(zhí)行失敗后會(huì)自動(dòng)執(zhí)行該方法
    public function failed($data)
    {
        Log::error('消息隊(duì)列達(dá)到最大重復(fù)執(zhí)行次數(shù)后失敗:' . json_encode($data));
    }

    // 消息隊(duì)列執(zhí)行方法
    public function doJob($data)
    {
        // 具體執(zhí)行業(yè)務(wù)
        
        
        $data = json_encode($data);
        echo '消息隊(duì)列:' . $data;
        // 這里的判斷條件以具體業(yè)務(wù)是否執(zhí)行成功進(jìn)行判斷
        if ($data) {
            echo "執(zhí)行成功";
            return true;
        } else {
            echo "執(zhí)行失敗";
            return false;
        }
    }}

接下來(lái)就是啟用隊(duì)列的監(jiān)聽模式了,因?yàn)椴豢赡苊看我挥腥蝿?wù)加進(jìn)來(lái)就去手動(dòng)執(zhí)行一次隊(duì)列。隊(duì)列的監(jiān)聽模式有兩種

項(xiàng)目根目錄執(zhí)行

php think queue:work --queue 隊(duì)列名

但是由于需要,我們還要將消費(fèi)者掛起守護(hù)進(jìn)程執(zhí)行,以確保關(guān)掉終端還能夠啟動(dòng)隊(duì)列。

nohup php think queue:listen --queue 隊(duì)列名 &

PS:shell中輸入exit來(lái)退出終端
PS:shell中輸入exit來(lái)退出終端
PS:shell中輸入exit來(lái)退出終端

因?yàn)樵趎ohup執(zhí)行成功后直接點(diǎn)關(guān)閉程序按鈕關(guān)閉終端時(shí)會(huì)斷掉該命令所對(duì)應(yīng)的session,導(dǎo)致 nohup 對(duì)應(yīng)的進(jìn)程被通知需要一起關(guān)掉。

到此,相信大家對(duì)“ThinkPHP怎么使用think-queue實(shí)現(xiàn)redis消息隊(duì)列”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


網(wǎng)頁(yè)名稱:ThinkPHP怎么使用think-queue實(shí)現(xiàn)redis消息隊(duì)列
分享網(wǎng)址:http://weahome.cn/article/jedsee.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部