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’)是永远无法执行的,这种做法很不科学啊,怎和以会这样
高认可度评论:
如果你用了 PHPStorm 一眼就能看出问题,\Exceptions -> \Exception
handle函数是交给cli模式去执行的,在队列里面是属于消费者。
简单来说,你在脚本运行的情况下打印输出,在客户端是看不到,你可以用日志记录输出或者控制台查看。
laravel是怎么去检测这次消费是否失败的呢?你应该猜到了,就是看这次进程是不是有异常,有异常就加入失败队列。所以这里不能使用异常去处理。
这里的处理可以分为逻辑上和程序上,
逻辑上要怎么处理,当然就是看你的业务逻辑了。 程序上,如果成功了那么就消费成功了。如果失败了,那么就是进入了失败队列。你可以重试,也可以去查看失败队列的情况。
你明白了消费者在cli模式下进行,那么就没有什么技术问题。最后提一点,使用一个技术,不求细枝末节,但要清楚这个技术的关键点。共勉
我都catch了,但是没用
handle函数是交给cli模式去执行的,在队列里面是属于消费者。
简单来说,你在脚本运行的情况下打印输出,在客户端是看不到,你可以用日志记录输出或者控制台查看。
laravel是怎么去检测这次消费是否失败的呢?你应该猜到了,就是看这次进程是不是有异常,有异常就加入失败队列。所以这里不能使用异常去处理。
这里的处理可以分为逻辑上和程序上,
逻辑上要怎么处理,当然就是看你的业务逻辑了。 程序上,如果成功了那么就消费成功了。如果失败了,那么就是进入了失败队列。你可以重试,也可以去查看失败队列的情况。
你明白了消费者在cli模式下进行,那么就没有什么技术问题。最后提一点,使用一个技术,不求细枝末节,但要清楚这个技术的关键点。共勉
我试过,有一次只要在队列里面抛出异常,我都有catch,还是一样会导致队列失败,出去玩了一圈,在另一个队列上,也写类似的代码,会被自己的catch捕获,不过时间有点久,也就是说执行时间卡了
这个行为有些奇怪,有点不够统一的意思
我在CLI打印是能看的得到的
如果你用了 PHPStorm 一眼就能看出问题,\Exceptions -> \Exception
不过PHPStorm 是收费的,买不起,平时用的都是免费的一些IDE
不会呀,我都可以,retries设置了吗, 失败队列的表设置了吗?还有你自己捕获了异常,是不会触发retry的,你要让异常直接抛出来,别自己又给捕获了