1:安装redis
2:安装think-queue
poser 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队列是否存在新订单数据
7:到期执行订单状态修改
8:宝塔环境添加进程守护
安装supervisord管理器
添加进程守护管理
更多推荐
订单
发布评论