栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

thinkphp 延时队列/自动取消订单/php自动操作

thinkphp 延时队列/自动取消订单/php自动操作

延时队列介绍:

什么是延时队列?顾名思义:首先它要具有队列的特性,再给它附加一个延迟消费队列消息的功能,也就是说可以指定队列中的消息在哪个时间点被消费。

使用场景

延时队列在项目中的应用还是比较多的,尤其像电商类平台订单成功后,在30分钟内没有支付,自动取消订单
外卖平台发送订餐通知,下单成功后60s给用户推送短信。
如果订单一直处于某一个未完结状态时,及时处理关单,并退还库存
淘宝新建商户一个月内还没上传商品信息,将冻结商铺等
……
上边的这些场景都可以应用延时队列解决。

php使用方法
首先安装queue
composer require topthink/think-queue
如果安装失败需要注意安装版本的问题:
composer create-project topthink/think tp5 5.0.*

获取版本后安装指定版本

composer require topthink/think-queue  1.1.4
代码实现功能

1,首先搭建消息队列的存储环境
推荐redis储存环境
可自行在宝塔环境搭建redis服务
2,配置驱动环境

打开项目configqueue.php 进行配置
 'Redis',        // Redis 驱动
	    'expire' => 60,        // 任务的过期时间,默认为60秒; 若要禁用,则设置为 null
	    'default' => 'default',        // 默认的队列名称
	    'host' => '127.0.0.1',    // redis 主机ip
	    'port' => 6379,        // redis 端口
	    'password' => '',        // redis 密码
	    'select' => 0,        // 使用哪一个 db,默认为 db0
	    'timeout' => 0,        // redis连接的超时时间
	    'persistent' => false,        // 是否是长连接
	];

3,创建队列和推送
新增 applicationindexcontrollerJobTest.php 控制器,在该控制器中添加 fire 方法
fire方法是消息队列默认调用的方法

attempts() > 2) {
            echo 1;
            Log::write('Test执行失败了');
            $job->delete();
        } else {
            //可在里边执行具体增删改查
            $data = [
                    'rand'=>$data['name'],
                    'create_time'=>date('Y-m-d H:i:s')
                ];
            JobData::insert($data);
            $job->delete();
        }
    }
}

在项目中进行调用延时队列方法

$shopid], 'Test');// //参数1:时间,,参数2:路径,参数3:业务参数,参数4:队列名称
	    }
 }

处理任务
打开命令行切换项目目录输入命令启动任务

php think queue:work --daemon --queue Test 

配合supervisor使用,保证进程常驻
宝塔安装supervisor添加守护进程

启动后查看日志

延时队列到此结束
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/731067.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号