thinkphp6訊息佇列實現
阿新 • • 發佈:2020-12-28
技術標籤:ThinkPHP
首先看一下目錄結構
話不多說 上程式碼
Login控制器檔案
class Login extends BaseController
{
public function login()
{
if (request()->isPost()) {
// 接收賬號密碼
$params = paramsTrim(request()->param());
// 查詢使用者資訊
$user ['userID'] = 1;
// 登入訊息佇列檔案所在
$loginExpress = 'app\job\Login';
// 佇列的名稱 這個會儲存到redis裡
$loginQueueName = 'adminLoginQueue';
// 佇列引數
$loginQueueParams = ['name' => $params['name'], 'password' => $params['password'],'accessTokenName' => $params['name'].'accessToken' .$user['userID']];
// 即時推送佇列 延時推送是later
$pushTask = Queue::push(\app\login\controller\job\Login::class,$loginQueueParams,$loginQueueName);
if ($pushTask !== false) {
echo '已經啟動';
} else {
echo 'Oops, something went wrong.' ;
}
}
}
Login佇列檔案
<?php
namespace app\login\controller\job;
use think\facade\Cache;
use think\queue\Job;
class Login{
// 釋出者
public function fire(Job $job,$data)
{
// 查詢 token是否存在 如果已經存在 刪除任務
if (cache($data['accessTokenName'])) {
$job->delete();
return;
}
// 執行任務
$consumerLogin = $this->consumerLogin($data);
// 如果執行成功 刪除任務
if ($consumerLogin) {
$job->delete();
return;
} else {
// 否則 檢查執行次數 如果已經重試3次
if ($job->attempts() > 3){
// 通過這個方法可以檢查這個任務已經重試了幾次了
// 刪除任務 執行失敗
print("<warn>Hello Job has been retried more than 3 times!"."</warn>\n");
$job->delete();
return;
}
}
}
// 消費者
public function consumerLogin($data)
{
//這裡做一些自定義的操作 例如傳送個郵件 簡訊什麼的
if (true) {
return true;
}
return false;
}
}