thinkphp6消息队列实现

首先看一下目录结构
在这里插入图片描述

话不多说 上代码
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;
    }
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值