我的编程技术记录 Good Luck To You!

ThinkPHP5.0+Queue消息队列 非原创转

https://my.oschina.net/u/3554366/blog/1939097


Queue消息队列:

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

优点:

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

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

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

 

缺点:

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

 

官方文档地址:

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

 

安装与配置:

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使用,保证进程常驻

 

© 著作权归作者所有


作者:admin 分类:未分类 浏览:28 评论:0