#### 1. TP6.0 消息隊(duì)列 topthink/think-queue --- `topthink/think-queue` 是ThinkPHP官方提供的一個(gè)消息隊(duì)列服務(wù),是專(zhuān)門(mén)支持隊(duì)列服務(wù)的擴(kuò)展包 github : [https://github.com/top-think/think-queue](https://github.com/top-think/think-queue) packagist : [https://packagist.org/packages/topthink/think-queue](https://packagist.org/packages/topthink/think-queue) #### 2. think-queue 各主版本對(duì)應(yīng)適用的TP版本 --- | think-queue 版本號(hào) | 適用的TP版本 | | ------------ | ------------ | | 1.x | ThinkPHP5.0 | | 2.x | ThinkPHP5.1 | | 3.x | ThinkPHP6.0 | #### 3. 安裝 topthink/think-queue --- 在應(yīng)用根目錄執(zhí)行命令, 下載 `topthink/think-queue` 擴(kuò)展 安裝擴(kuò)展后會(huì)自動(dòng)生成消息隊(duì)列配置文件 `config/queue.php` ``` composer require topthink/think-queue ``` #### 4. topthink/think-queue 驅(qū)動(dòng)類(lèi)型 --- | 驅(qū)動(dòng)類(lèi)型 | 對(duì)應(yīng)的類(lèi)型值 | | ------------ | ------------ | | sync | 同步執(zhí)行, 默認(rèn)值 | | database | 數(shù)據(jù)庫(kù)驅(qū)動(dòng) | | redis | Redis驅(qū)動(dòng) 【推薦】 | | 其他自定義的完整的類(lèi)名 | ... | 如果驅(qū)動(dòng)類(lèi)型為 `sync`, 則以下兩種發(fā)布任務(wù)的方式都會(huì)同步執(zhí)行 當(dāng)驅(qū)動(dòng)類(lèi)型修改為 `redis` 時(shí), `think\facade\Queue::later()` 才會(huì)異步執(zhí)行 ``` // 立即執(zhí)行 think\facade\Queue::push($job, $data = '', $queue = null); // 延遲執(zhí)行 think\facade\Queue::later($delay, $job, $data = '', $queue = null); ``` ``` return [ 'default' => 'sync', 'connections' => [ 'sync' => [ 'type' => 'sync', ], ... ], 'failed' => [ 'type' => 'none', 'table' => 'failed_jobs', ], ]; ``` #### 5. 發(fā)布任務(wù) --- ``` // 立即執(zhí)行 think\facade\Queue::push($job, $data = '', $queue = null); // 延遲執(zhí)行 // $delay 延遲時(shí)間,單位秒,幾秒后執(zhí)行 // $job 任務(wù)對(duì)象 // $data 自定義數(shù)據(jù) // $queue 隊(duì)列名稱(chēng) think\facade\Queue::later($delay, $job, $data = '', $queue = null); ``` ``` /** * 獲取任務(wù)對(duì)象 * 發(fā)布任務(wù)時(shí)使用 * @param string $class * @param string $action * @example getJob(\app\queue\Task::class, 'fire') * @return string app\queue\task@fire */ function getJob(string $class, string $action) { // 使用示例 // $delay = 10; // $job = getJob(\app\queue\Task::class, 'fire'); // \think\facade\Queue::later($delay, $job, $data); return implode('@', [strtolower($class), $action]); } ``` #### 6. 監(jiān)聽(tīng)任務(wù)并執(zhí)行 --- 兩種命令 ``` php think queue:work php think queue:listen ``` 兩種命令的具體的可選參數(shù)可以輸入命令加 --help 查看 ``` php think queue:work --help php think queue:listen --help ``` 常用參數(shù) ``` // 任務(wù)執(zhí)行五次還未成功, 第六次進(jìn)入failed方法 php think queue:listen --tries 5 ```