糯麦 NurMai

糯麦科技

/

新闻资讯

/

技术讨论

/

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

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

原创 新闻资讯

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

2853 浏览

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. 微信小程序中父子组件相互调用详解

    在微信小程序中,组件化开发是一种重要的开发模式,它能够将复杂的界面拆分成多个独立的组件,使代码更容易维护和扩展。在组件化的开发中,父子组件之间的相互调用和传参是常见的需求。

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

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

    查看详情