Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我如何让Laravel Job在不重新启动的情况下失败,这样我就可以使用sentry来记录异常?

我如何让Laravel Job在不重新启动的情况下失败,这样我就可以使用sentry来记录异常?
EN

Stack Overflow用户
提问于 2020-04-06 10:19:50
回答 2查看 175关注 0票数 0

在我的多服务器应用程序中,我使用laravel的排队系统来运行后台作业。有时在我的逻辑中,我想让我的工作抛出一个异常,这样我就可以通过一个哨兵使用提供的laravel library来记录它。

所以在我的工作中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;

use App\Model\Etable\User;
use App\Model\User;

class MyJob implements ShouldQueue
{
    use Dispatchable;
    use InteractsWithQueue;
    use Queueable;

    /**
     * @var int
     */
    private $user_id;


    /**
     * @param int   $user          The user that has opted or deopted for newsletter consent
     */
    public function __construct(int $id)
    {
        $this->user_id = $user_id;
    }


    public function handle(): void
    {  
        /**
         * @var User
         */
        $user=User::useWritePdo()->find($this->user_id);

        if(empty($user)){
            throw new \Exception("No such a user with user id: {$this->user_id}");
        }

        // Rest of logic here
    }
}

一旦抛出异常,我将被登录到sentry,但它也将继续重新生成,因为laravel的作业逻辑应该是这样做的。

在我的例子中,我认为在用户不存在的情况下重新生成MyJob是浪费资源,没有值可以继续生成,因为在没有用户存在的情况下,逻辑本身无法执行。另一方面,对于任何其他错误,我希望我的作业不断重试,直到能够再次成功运行。

那么,我如何才能让我的工作不在特定的错误中重生呢?如果我可以使用laravel ofers的默认日志记录方法,以便通过卫兵专用通道将错误记录到卫兵中,那就更好了。

EN

回答 2

Stack Overflow用户

发布于 2020-04-06 13:46:03

最好也是最简单的方法是,一旦代码不能检查已经执行了多少次:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;

use App\Model\Etable\User;
use App\Model\User;

class MyJob implements ShouldQueue
{
    use Dispatchable;
    use InteractsWithQueue;
    use Queueable;

    /**
     * @var int
     */
    private $user_id;


    /**
     * @param int   $user          The user that has opted or deopted for newsletter consent
     */
    public function __construct(int $id)
    {
        $this->user_id = $user_id;
    }


    public function handle(): void
    {  
        /**
         * @var User
         */
        $user=User::useWritePdo()->find($this->user_id);

        if(empty($user)){
            if ($this->attempts() > 1) { 
             return; 
            }
            throw new \Exception("No such a user with user id: {$this->user_id}");
        }

        // Rest of logic here
    }
}

这是通过以下方式实现的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if ($this->attempts() > 1) { 
 return; 
}

所以一旦抛出异常,异常就会被记录到Sentry中,然后在第二次执行时,它就会退出,再也不会重新出现。

票数 1
EN

Stack Overflow用户

发布于 2020-04-06 10:45:49

请注意,失败的作业将不会重新运行,除非您显式运行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
php artisan queue:failed

您可以抛出一个异常,并在AppServiceProvider,deleting the job的引导方法中处理它,以避免其进一步重试。有关如何操作的信息,请参阅documentation

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61057560

复制
相关文章
实践搭建Sentry异常中心结合Laravel使用
Sentry 是一个开源的实时错误追踪系统,可以帮助开发者实时监控并修复异常问题。它主要专注于持续集成、提高效率并且提升用户体验。Sentry 分为服务端和客户端 SDK,前者可以直接使用它家提供的在线服务,也可以本地自行搭建;后者提供了对多种主流语言和框架的支持,包括 React、Angular、Node、Django、RoR、PHP、Laravel、Android、.NET、JAVA 等。同时它可提供了和其他流行服务集成的方案,例如 GitHub、GitLab、bitbuck、heroku、slack、Trello 等。目前公司的项目也都在逐步应用上 Sentry 进行错误日志管理。
憧憬博客
2020/07/21
1.9K0
实践搭建Sentry异常中心结合Laravel使用
如何使用 Sentry 捕获前端异常
英文 | https://javascript.plainenglish.io/how-to-catch-frontend-exceptions-with-sentry-34773b026ced
coder_koala
2022/11/28
1.5K0
如何使用 Sentry 捕获前端异常
突如其来的"中断异常",我(Java)该如何处理?
本文讲述了Java异常处理机制,包括异常的分类、处理方式、语法以及示例代码。文章详细分析了在Java程序中如何合理地处理异常,以提升程序稳定性和用户使用体验。
CN_Simo
2017/12/26
1.2K0
突如其来的"中断异常",我(Java)该如何处理?
【走进OpenCV】这样腐蚀下来让我膨胀!
学习计算机视觉最重要的能力应该就是编程了,为了帮助小伙伴尽快入门计算机视觉,小白准备了【走进OpenCV】系列,主要帮助小伙伴了解如何调用OpenCV库,涉及到的知识点会做简单讲解。
小白学视觉
2019/10/24
6030
【走进OpenCV】这样腐蚀下来让我膨胀!
在Laravel中使用数据库事务以及捕获事务失败后的异常
在Laravel中要想在数据库事务中运行一组操作,则可以在 DB facade 中使用 transaction 方法。如果在事务的闭包内抛出异常,事务将会被自动还原。如果闭包运行成功,事务将被自动提交。你不需要担心在使用 transaction 方法时还需要亲自去手动还原或提交事务:
全栈程序员站长
2022/07/08
1.3K0
在Laravel中使用数据库事务以及捕获事务失败后的异常
我在项目中是这样配置Vue的
在前面的文章中,我为大家带来了许多Vue 实战技巧,也得到了大家的许多好评,但中间还是存在着些许漏洞,在此向大家表示歉意。其实在前面那些技巧之外,我们还可以做的更多,让我们的开发流程更流畅,开发体验更好,项目性能更上一层楼,怎么做呢,我们一起来看看。
前端进击者
2021/07/27
8890
我是这样解决 HBuilderX 安卓基座安装失败的问题
出现这个问题的原因是我把手机的 HBuilder App 给删掉了,通过电脑连接数据线的方式安装就会提示上面的错误。
德育处主任
2023/02/26
4K0
我是这样解决 HBuilderX 安卓基座安装失败的问题
如果让我回到大学,我会这样学习Servlet
前言 工作已经有一段时间了,如果让我重新学Servlet,我会怎么学呢?下面抛出两个常见的问题,我分开来解答
Java3y
2020/03/19
1.1K0
如果让我回到大学,我会这样学习Servlet
在不更换耳机的情况下,如何让敌人脚步声非常清脆?
1、点击[扬声器] 2、点击[声音] 3、点击[播放] 4、点击[扬声器] 5、点击[属性] 6、点击[增强] 7、点击[环境] 8、点击[设置] 9、点击[铺地毯的走廊] 10、点击[确定]
裴来凡
2022/05/28
8800
在不更换耳机的情况下,如何让敌人脚步声非常清脆?
0568-普通用户在Sentry中使用show roles 命令查看失败异常分析
Sentry的介绍和使用Fayson前面的文章了介绍了很多,本篇文章主要介绍集群启用Sentry后普通用户用户执行show roles 命令无法正常查看的分析以及解决办法。
Fayson
2019/04/29
1.1K0
0568-普通用户在Sentry中使用show roles 命令查看失败异常分析
性能优化-放开那片内存,让我来!
假设你已经通过《perf:一个命令发现性能问题》中的方法或者使用profiler分析,已经发现内存分配是性能瓶颈:
编程珠玑
2021/01/05
1K0
Laravel如何使用数据库事务及捕获事务失败后的异常详解
前言 如果大家在Laravel中要想在数据库事务中运行一组操作,则可以在 DB facade 中使用 transaction 方法。如果在事务的闭包内抛出异常,事务将会被自动还原。如果闭包运行成功,事务将被自动提交。 你不需要担心在使用 transaction 方法时还需要亲自去手动还原或提交事务:
用户2323866
2021/07/12
1.7K0
建造者模式--师父让我来炼丹
话说小帅在华山脚下的仙草药房兢兢业业工作了多年,从一个打杂的升级成了一个工厂的负责人,负责生产药房的镇店之宝----超级黑玉断续膏。
zhanyd
2022/05/16
2870
建造者模式--师父让我来炼丹
主人,放下那杯咖啡让我来!
人工智能的威胁虽然是老生常谈,但是大数据催生下的人工智能工具,不断颠覆人们想象,一旦它们用上了“云大脑”,每个行业都要为自己捏一把冷汗。
科技云报道
2022/04/12
2070
主人,放下那杯咖啡让我来!
我来不匿名聊聊这小程序的技术观察
略表愚见,希望大家喜欢,同时大家有觉得好的小程序也可以告诉我,我来帮忙做技术观察。
花叔
2018/04/18
1.6K4
我来不匿名聊聊这小程序的技术观察
我是这样在 React 中实践 TDD 编程的
在Redux中编写测试听起来肯定有悖直觉。如果你使用了Redux,它可能看起来更加复杂。
前端修罗场
2022/07/29
1.9K0
这样就可以自由的使用Django
Django 之于 Python,犹如 Spring 之于 Java。Django 是 Python 的 web 开发框架,既然是框架,就是一套完整的解决方案,使用框架的时候,需要把你的代码放到框架合适的地方,框架会在合适的时机调用你的代码,框架控制一切,我们只需要按照规则写代码。
somenzz
2020/11/25
6270
记录一次让我懵逼的沟通
日常工作任务和其他部门进行对接联调,他们提供数据供我这里查询,使用的数据库是MongoDB(同步Mysql)
青衫染红尘
2021/04/09
3170
Laravel之队列「建议收藏」
队列配置文件存放在config/queue.php 。在该文件中你将会找到框架自带的每一个队列驱动的连接配置,包括数据库、Beanstalkd、 IronMQ、 Amazon SQS、 Redis 以及同步(本地使用)驱动。其中还包含了一个 null 队列驱动以拒绝队列任务。
全栈程序员站长
2022/08/09
1.8K0
完善你的Laravel异常处理
异常处理是编程中十分重要但也最容易被人忽视的语言特性,它为开发者提供了处理程序运行时错误的机制,对于程序设计来说正确的异常处理能够防止泄露程序自身细节给用户,给开发者提供完整的错误回溯堆栈,同时也能提高程序的健壮性。
KevinYan
2019/10/13
2.8K0

相似问题

(Ruby )--我如何设置它,这样就可以记录失败的DB查询,而不结束程序?

11

Laravel使用Sentry实现记住我的功能

15

如何确保sentry正在捕获我的异常?

115

Laravel -如何让Cron Job在我的本地主机Windows上工作

122

在Laravel 4中对Sentry使用记住我功能

51
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文