Laravel 在队列中,要是有抛出异常,直接进入失败队列,这个不太符合逻辑啊,你们怎么处理?

public function handle()
    {  

        $orderTap = new OrderTap($this->account, $this->task);

        try {
            //$orderTap->tap(); // 如果抛出异常,说明当前活动不符合需求

            throw new \Exception("Error Processing Request", 1);

            //$orderTap->createOrder();
            //event(new \App\Events\Notification($account, '接单成功', 1));
        }catch(\Exceptions $e){
            die('test');
            event(new \App\Events\Notification($account, $e->message, 0));
        }
    }

相当于说,die(‘test’)是永远无法执行的,这种做法很不科学啊,怎和以会这样

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 8
leo

如果你用了 PHPStorm 一眼就能看出问题,\Exceptions -> \Exception

3年前 评论
Hachiko 3年前
ma1232006 3年前
huqs 3年前
深蓝色 (楼主) 3年前

handle函数是交给cli模式去执行的,在队列里面是属于消费者。
简单来说,你在脚本运行的情况下打印输出,在客户端是看不到,你可以用日志记录输出或者控制台查看。

laravel是怎么去检测这次消费是否失败的呢?你应该猜到了,就是看这次进程是不是有异常,有异常就加入失败队列。所以这里不能使用异常去处理。

这里的处理可以分为逻辑上和程序上,

逻辑上要怎么处理,当然就是看你的业务逻辑了。 程序上,如果成功了那么就消费成功了。如果失败了,那么就是进入了失败队列。你可以重试,也可以去查看失败队列的情况。

你明白了消费者在cli模式下进行,那么就没有什么技术问题。最后提一点,使用一个技术,不求细枝末节,但要清楚这个技术的关键点。共勉

3年前 评论

我都catch了,但是没用

3年前 评论

handle函数是交给cli模式去执行的,在队列里面是属于消费者。
简单来说,你在脚本运行的情况下打印输出,在客户端是看不到,你可以用日志记录输出或者控制台查看。

laravel是怎么去检测这次消费是否失败的呢?你应该猜到了,就是看这次进程是不是有异常,有异常就加入失败队列。所以这里不能使用异常去处理。

这里的处理可以分为逻辑上和程序上,

逻辑上要怎么处理,当然就是看你的业务逻辑了。 程序上,如果成功了那么就消费成功了。如果失败了,那么就是进入了失败队列。你可以重试,也可以去查看失败队列的情况。

你明白了消费者在cli模式下进行,那么就没有什么技术问题。最后提一点,使用一个技术,不求细枝末节,但要清楚这个技术的关键点。共勉

3年前 评论

我试过,有一次只要在队列里面抛出异常,我都有catch,还是一样会导致队列失败,出去玩了一圈,在另一个队列上,也写类似的代码,会被自己的catch捕获,不过时间有点久,也就是说执行时间卡了

3年前 评论

这个行为有些奇怪,有点不够统一的意思

3年前 评论

我在CLI打印是能看的得到的

3年前 评论
leo

如果你用了 PHPStorm 一眼就能看出问题,\Exceptions -> \Exception

3年前 评论
Hachiko 3年前
ma1232006 3年前
huqs 3年前
深蓝色 (楼主) 3年前

不过PHPStorm 是收费的,买不起,平时用的都是免费的一些IDE

3年前 评论
游离不2 3年前

不会呀,我都可以,retries设置了吗, 失败队列的表设置了吗?还有你自己捕获了异常,是不会触发retry的,你要让异常直接抛出来,别自己又给捕获了

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!