zoukankan      html  css  js  c++  java
  • laravel 队列 延时队列-Redis

    直接上代码了

    <?php
    
    namespace AppJobs;
    
    use IlluminateBusQueueable;
    use IlluminateQueueSerializesModels;
    use IlluminateQueueInteractsWithQueue;
    use IlluminateContractsQueueShouldQueue;
    use IlluminateFoundationBusDispatchable;
    use MockeryException;
    
    # php artisan  queue:work  --queue='队列名称,队列名称2'; 按照顺序处理 开启
    # 调起这个控制器 数据处理完成 传给指定队列【前提 队列已经开启】
    # 队列进行数据的处理【如 判断订单是否满足过期时间 未支付,未支付撤销订单 返回库存数量】
    # 若队列有问提  在队列的异常中处理 是否再次进入队列处理 还是...
    
    
    class task implements ShouldQueue
    {
        use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    
        private $data;
        private $tres;  # 最大尝试次数
        private $timeout;   # 最大超时时间
    
        /**
         * Create a new job instance.
         *
         * @return void
         */
        public function __construct($data)
        {
            //
    
            $this->data = $data;
        }
    
        /**
         * Execute the job.
         *
         * @return void
         */
        public function handle()
        {
            //  这里没啥事。就是你的业务逻辑 
     
        echo 123;
    } /** * 失败处理 存表 单独设置定时任务 重新跑 * @param Exception $exception */ public function failed(Exception $exception) { echo 222; var_dump($exception->getMessage()); # 打印错误信息 } }

    重点是控制器这里 ;

    <?php
    
    namespace AppHttpControllers	ask;
    
    use AppJobs	ask;
    use IlluminateHttpRequest;
    use AppHttpControllersController;
    
    class taskController extends Controller
    {
        //模拟下单
        public function task()
        {
            $data = [
                'tid'   => date('m-d H:i:s').uniqid(),
                'name'  => 'ethan',
                'address'  => 'ethan'
            ];
    
           $jobs = new task($data);
           # 把任务放到队列中
            $jobs->dispatch($jobs)->onQueue('task')->delay(5);
    
            # ->onQueue()->delay()
            # onQueue 放入指定队列中去,如果不加 则redis 会放到默认队列中。
            # delay 延迟的意思。可以实现定时任务 单位秒
            # addMinutes(10)); 延迟的时间 单位分钟  延迟队列可以做订单下单 多久未支付 自动取消订单 恢复库存的动作
    
            # 以上为 存redis 队列成功
    
            # 最后执行 php artisan  queu e:work  --queue='队列名称';
            return 'ok!';
        }
    }

     我这里执行没有任何问题 因为是前俩天做的 就不贴结果了。

    作者地址:https://www.cnblogs.com/G921123/
    创作也有乐趣 知识分享 转载注明出处 相互理解 谢谢! WeChat:17321295203
  • 相关阅读:
    C# 调用线程并行上下文穿透-ILogicalThreadAffinative+CallContext
    C# 多线程调用静态方法或者静态实例中的同一个方法-方法内部的变量是线程安全的
    解析 .Net Core 注入——注册服务
    [Python]编码声明:是coding:utf-8还是coding=urf-8呢
    Vue加载组件、动态加载组件的几种方式
    源码版本管理工具 :TFS GIT
    Microsoft/Git-Credential-Manager-for-Mac-and-Linux
    SqlServer 对分组的内容进行拼接-group_concat
    MFC中页面设置对话框CPageSetupDialog
    MFC中查找替换对话框CFindReplaceDialog类
  • 原文地址:https://www.cnblogs.com/G921123/p/15292670.html
Copyright © 2011-2022 走看看