ThinkPHP5 Queue消息队列


think-queue安装

官方文档地址

https://packagist.org/packages/topthink/think-queue。


Queue消息队列:

Thinkphp官方团队开发的一个专门支持队列服务的扩展包,使用composer管理,使用起来非常方便


优点:

1. Queue内置了 Redis,Database,Topthink ,Sync这四种驱动,本文使用Redis驱动


2. Queue消息队列适用于大并发或者返回结果 时间有点长并需要批量操作的第三方接口,可用于短信发送、邮件发送、APP推送


3. Queue消息消息可进行发布,获取,执行,删除,重发,失败处理,延迟执行,超时控制等操作


缺点:

1. 一旦需处理数据加入到任务内就不能删除


安装与配置:

1. 是用Composer进行安装,命令:composer require topthink/think-queue

2. 配置文件位于 application/extra/queue.php

3. 本文使用类型是Redis,假如你的当前环境没有Redis,则自行安装

4. 配置文件如下

注意:

4.1 Select是当前Redis库,Redis默认16个数据库

5. 默认配置参数与源代码存放到ThinkPHP vendoer文件夹下

附上代码:

创建任务

//创建任务: 项目命名空间\模块\文件夹\控制器@方法
$job = "app\message\job\usermessage@smspush";
//$job = 任务名称
//$last_info = 插入参数
//null 指定任务名称,没有则使用默认
\think\Queue::push($job,$last_info, null);

处理任务代码

代码有删减过,只需知道如何使用消息队列即可

public function smspush(Job $job,$msm_info)
    {
    	//数据格式不符合则删除任务
        if(empty($msm_info) || !is_array($msm_info)){
            echo "待处理数据格式错误,删除\n";
            $job->delete();
        }

        //任务执行超过1次,则删除任务
        if ($job->attempts() > 0) {
            $job->delete();
        }

        //获取用户列表
        $user_model = new Userss();
        $user_list = $user_model->select();

        //没有用户列表,删除任务
        if(empty($user_list)){
            echo "没有用户列表\n";
            $job->delete();

            return false;
        }

        $user_msm_model = new UserssMsm();
        $user_rec_msm_model = new UserRecipiMsm();

        //修改msm数据后,发短信并写入数据表记录
        if(!empty($res)){
            foreach($user_list as $k=>$v){
            	//发送短信
                sends_msgs($v['mobile'],$msm_info['content']);

            }

        }
        //执行完任务后必须删除任务
        $job->delete();
    }

//$job->delete();   删除任务
//$job->attempts();  查看任务执行次数
// 注意:执行完任务后必须删除任务

监听任务并执行

php think queue:listen
php think queue:work --daemon(不加--daemon为执行单个任务)


两种,具体的可选参数可以输入命令加 --help 查看

可配合supervisor使用,保证进程常驻