1. 程式人生 > 其它 >thinkphp6訊息佇列實現

thinkphp6訊息佇列實現

技術標籤: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;
    }
}