IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> laravel8 延迟消息队列 -> 正文阅读

[开发测试]laravel8 延迟消息队列

php artisan make:job OrderJop 生成任务类,类名自己取

?配置 App\config\queue.php

? ?

<?php

namespace App\Jobs;

use App\Models\GoodsModel;
use App\Models\OrderModel;
use App\Models\SkillModel;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redis;

class OrderJop implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    private $oid = '';
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($oid,$delay)
    {
        $this->oid = $oid;
        $this->delay($delay);
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        DB::beginTransaction();
        try {
            $result = OrderModel::where('order_id',$this->oid)->first();
            //如果时间到了order_status 还是为 0 未支付 就直接根据订单id 修改订单状态
            if ($result['order_status'] == 0){
                $res = OrderModel::where('order_id',$this->oid)->update(['order_status'=>1]);//未支付 把 0 改为 1 取消订单
                if ($res){
                    SkillModel::where('goods_id',$result['g_id'])->increment('skill_stock');//回秒杀库存
                    $skillOneData = SkillModel::where('goods_id',$result['g_id'])->first();
                    GoodsModel::where('id',$result['g_id'])->update(['goods_stock'=>$skillOneData['skill_stock']]);//同步商品库存
                }
            }
            DB::commit();
        }catch (\Exception $e){
            DB::rollBack();
        }
    }
}

订单? 调用orderJop 传参

 /**
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     * 创建订单
     */
    public function createOrder(Request $request)
    {


        //抢购用户id
        $userID = 5;
        //商品id
        $goodsID = $request->input("goods_id");
        //对应商品抢购成功用户集合 {1,3,4}
        $robSuccessUser = "success_user".$goodsID;
        //进行判断当前用户是否在抢成功的队列里面
        $result = Redis::sismember($robSuccessUser,$userID);
        //如果你在这里面,就抢完了
        if (!$result) {
            //如果抢购成功 返回状态码,进行下单
            return response()->json(['errorCode' => 20003, 'data' => '', 'msg' => '手慢了!']);
        }

        DB::beginTransaction();
        try{
            //减库存
            SkillModel::where('goods_id',$goodsID)->decrement('skill_stock');
            $skill_stock = SkillModel::where('goods_id',$goodsID)->first();
            GoodsModel::where('id',$goodsID)->update(['goods_stock'=>$skill_stock['skill_stock']]);
            $goodsOneData =  GoodsModel::where('id',$goodsID)->first();
            //生成订单
            $arr = [
                'u_id'=>$userID,//用户
                'g_id'=>$goodsID,//商品
                'order_time'=>time(),//时间
                'order_no'=>'rb'.time().rand(1111,9999),//订单编号
                'order_price'=>$goodsOneData['goods_price'] //金额
            ];
            $res =  OrderModel::create($arr);
            $bool = OrderModel::where('order_no',$res['order_no'])->first();


            DB::commit();
            //下单成功,跳转支付页面
            $oid = $bool['order_id'];
            if ($oid){
                $this->dispatch(new orderJob($oid,30));//延迟消息队列
                return response()->json(['errorCode' => 0, 'data' => '', 'msg' => '秒杀成功,订单已生成!']);
            }

        }catch (\Exception $e){
            DB::rollBack();
        }

启动任务队列:php artisan queue:work 能看到执行成功

如果没有延迟效果? 执行? php artisan config:cache? 清理一下缓存

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-01-01 14:14:47  更:2022-01-01 14:16:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 6:03:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码