安裝
composer require topthink/think-queue
配置
配置文件位于?config/queue.php
公共配置
[ 'default'=>'sync' //驅(qū)動(dòng)類型,可選擇 sync(默認(rèn)):同步執(zhí)行,database:數(shù)據(jù)庫(kù)驅(qū)動(dòng),redis:Redis驅(qū)動(dòng),topthink:Topthink驅(qū)動(dòng) //或其他自定義的完整的類名 ]
驅(qū)動(dòng)配置
各個(gè)驅(qū)動(dòng)的具體可用配置項(xiàng)在thinkqueueconnector目錄下各個(gè)驅(qū)動(dòng)類里的options屬性中,寫在上面的queue配置里即可覆蓋
創(chuàng)建任務(wù)類
單模塊項(xiàng)目推薦使用?appjob?作為任務(wù)類的命名空間 多模塊項(xiàng)目可用使用?appmodulejob?作為任務(wù)類的命名空間 也可以放在任意可以自動(dòng)加載到的地方
任務(wù)類不需繼承任何類,如果這個(gè)類只有一個(gè)任務(wù),那么就只需要提供一個(gè)fire方法就可以了,如果有多個(gè)小任務(wù),就寫多個(gè)方法,下面發(fā)布任務(wù)的時(shí)候會(huì)有區(qū)別
每個(gè)方法會(huì)傳入兩個(gè)參數(shù)?thinkqueueJob $job(當(dāng)前的任務(wù)對(duì)象) 和?$data(發(fā)布任務(wù)時(shí)自定義的數(shù)據(jù))
還有個(gè)可選的任務(wù)失敗執(zhí)行的方法?failed?傳入的參數(shù)為$data(發(fā)布任務(wù)時(shí)自定義的數(shù)據(jù))
下面寫兩個(gè)例子
namespace appjob; use thinkqueueJob; class Job1{ public function fire(Job $job, $data){ //....這里執(zhí)行具體的任務(wù) if ($job->attempts() > 3) { //通過(guò)這個(gè)方法可以檢查這個(gè)任務(wù)已經(jīng)重試了幾次了 } //如果任務(wù)執(zhí)行成功后 記得刪除任務(wù),不然這個(gè)任務(wù)會(huì)重復(fù)執(zhí)行,直到達(dá)到最大重試次數(shù)后失敗后,執(zhí)行failed方法 $job->delete(); // 也可以重新發(fā)布這個(gè)任務(wù) $job->release($delay); //$delay為延遲時(shí)間 } public function failed($data){ // ...任務(wù)達(dá)到最大重試次數(shù)后,失敗了 } }
namespace applibjob; use thinkqueueJob; class Job2{ public function task1(Job $job, $data){ } public function task2(Job $job, $data){ } public function failed($data){ } }
發(fā)布任務(wù)
thinkQueue::push($job, $data = '', $queue = null)?和?thinkQueue::later($delay, $job, $data = '', $queue = null)?兩個(gè)方法,前者是立即執(zhí)行,后者是在$delay秒后執(zhí)行
$job?是任務(wù)名
單模塊的,且命名空間是appjob的,比如上面的例子一,寫Job1類名即可
多模塊的,且命名空間是appmodulejob的,寫model/Job1即可
其他的需要些完整的類名,比如上面的例子二,需要寫完整的類名applibjobJob2
如果一個(gè)任務(wù)類里有多個(gè)小任務(wù)的話,如上面的例子二,需要用@+方法名applibjobJob2@task1、applibjobJob2@task2
$data?是你要傳到任務(wù)里的參數(shù)
$queue?隊(duì)列名,指定這個(gè)任務(wù)是在哪個(gè)隊(duì)列上執(zhí)行,同下面監(jiān)控隊(duì)列的時(shí)候指定的隊(duì)列名,可不填
監(jiān)聽(tīng)任務(wù)并執(zhí)行
php think queue:listen
php think queue:work
兩種,具體的可選參數(shù)可以輸入命令加 --help 查看
可配合supervisor使用,保證進(jìn)程常駐
- //執(zhí)行一行
- php?think?queue:work?--queue?-v
- //循環(huán)執(zhí)行
- php?think?queue:work?--daemon