糯麦 NurMai

400-158-5662

糯麦科技

/

新闻资讯

/

技术讨论

/

TP6订单待支付超时自动取消

TP6订单待支付超时自动取消

原创 新闻资讯

于 2023-05-25 09:58:42 发布

17620 浏览

think-queue是ThinkPHP官方提供的一个消息队列服务,是专门支持队列服务的扩展包。think-queue消息队列适用于大并发或返回结果时间比较长且需要批量操作的第三方接口,可用于短信发送、邮件发送、APP推送。think-queue消息队列可进行发布、获取、执行、删除、重发、失败处理、延迟执行、超时控制等操作。

think-queue支持消息队列的基本特性

1.消息的发布、获取、执行、删除、重发、失败处理、延迟执行、超时控制等

2.队列的多队列、内存限制、启动、停止、守护等

3.消息队列可降级位同步执行


1:安装redis数据库

2:安装think-queue扩展


composer require topthink/think-queue


3:设置配置文件,使用redis进行存储,文件位置config/queue.php


return [
    'default'     => 'redis',
    'connections' => [
        'sync'     => [
            'type' => 'sync',
        ],
        'database' => [
            'type'       => 'database',
            'queue'      => 'default',
            'table'      => 'jobs',
            'connection' => null,
        ],
        'redis'    => [
            'type'       => 'redis',
            'queue'      => 'default',
            'host'       => '127.0.0.1',
            'port'       => 6379,
            'password'   => '',
            'select'     => 0,
            'timeout'    => 0,
            'persistent' => false,
        ],
    ],
    'failed'      => [
        'type'  => 'none',
        'table' => 'failed_jobs',
    ],
];


4:app目录下新建queue文件夹,文件夹下新建Order.php处理类


//订单超时取消
public function overdue(Job $job,$order_no){
    $order = OrderModel::get($order_no,1);  //校验当前订单是否为待支付状态
    if($order->isEmpty()){
        $job->delete();  //非待支付状态,删除执行
    } else {
        $result = OrderModel::overtime($order_no);  //更新订单状态为已过期
        if($result){
            $job->delete();  //更新过期成功,删除执行
        } else {
            if ($job->attempts() > 3) {
                $job->delete();  //累计执行3次均失败,删除执行
            }else{
                $job->release(10);  //间隔10秒执行一次
            }
        }
    }
}


5:订单生成成功后调用延时队列


use think\facade\Queue;
 
public static function createOrder(){
    $order = ...//执行订单生成存储       
    Queue::later(30 * 60,'app\queue\Order@overdue',$order['order_no']);  //加入队列,并延迟30分钟执行
}


6:生成订单后查看redis队列是否存在新订单数据


1.jpg


7:到期执行订单状态修改

8:宝塔环境添加进程守护

安装supervisord管理器


2.jpg


9:添加进程守护管理


3.jpg

Thinkphp

队列服务

超时取消

阅读排行

  • 1. 几行代码就能实现Html大转盘抽奖

    大转盘抽奖是网络互动营销的一种常见形式,其通过简单易懂的界面设计,让用户在游戏中体验到乐趣,同时也能增加商家与用户之间的互动。本文将详细介绍如何使用HTML,CSS和JavaScript来实现大转盘抽奖的功能。

    查看详情
  • 2. 浙江省同区域公司地址变更详细流程

    提前准备好所有需要的资料,包含:房屋租赁合同、房产证、营业执照正副本、代理人身份证正反面、承诺书(由于我们公司其中一区域已有注册另外一公司,所以必须需要承诺书)

    查看详情
  • 3. 微信支付商户申请接入流程

    微信支付,是微信向有出售物品/提供服务需求的商家提供推广销售、支付收款、经营分析的整套解决方案,包括多种支付方式,如JSAPI支付、小程序支付、APP支付H5支付等支付方式接入。

    查看详情
  • 4. 阿里云域名ICP网络备案流程

    根据《互联网信息服务管理办法》以及《非经营性互联网信息服务备案管理办法》,国家对非经营性互联网信息服务实行备案制度,对经营性互联网信息服务实行许可制度。

    查看详情
  • 5. 微信小程序申请注册流程

    微信小程序注册流程与微信公众号较为相似,同时微信小程序支持通过已认证的微信公众号进行注册申请,无需进行单独认证即可使用,同一个已认证微信公众号可同时绑定注册多个小程序。

    查看详情