thinkphp 延時佇列
阿新 • • 發佈:2021-09-10
安裝 thinkphp-queue
github :https://github.com/top-think/think-queue
composer:
composer require topthink/think-queue
報錯有可能是版本問題, 可以
composer require topthink/think-queue ^1.*
配置 extra/queue.php,我用的是redis非同步,Sync則是同步
<?php // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK IT ] // +---------------------------------------------------------------------- // | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: yunwuxin <[email protected]> // +---------------------------------------------------------------------- return [ 'connector' => 'Redis', // Redis 驅動 'expire' => 60, // 任務的過期時間,預設為60秒; 若要禁用,則設定為 null 'default' => 'default', // 預設的佇列名稱 'host' => '127.0.0.1', // redis 主機ip 'port' => 6379, // redis 埠 'password' => '', // redis 密碼 'select' => 0, // 使用哪一個 db,預設為 db0 'timeout' => 0, // redis連線的超時時間 'persistent' => false, ];
使用
在app下建立job目錄,建立Test.php,並編輯
<?php namespace app\job; use think\queue\job; class Test { public function fire(Job $job, $data){ if($job->attempts() > 2){ \think\Log::write('Test執行失敗'); $job->delete(); }else{ db('users')->insert([ 'username' => rand(1000,9999), ]); $job->delete(); } } }
在控制器呼叫
/** * 測試延時佇列 * Author : LYQ * Date : 2021/9/10 10:40 */ public function test_job() { Queue::later('10','app\job\Test',[],'Test'); //延遲十秒執行,Test為佇列名稱
Queue::push('app\job\Test',[],'Test'); //立即執行
}
監聽指令碼
php think queue:listen --queue Test
效果
第一個是立即執行,第二個則是十秒後執行