ThinkPHP5.0+Queue消息队列

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

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值