【问题标题】:Passing Exception Message to Queue::failing() in Laravel 5.1?在 Laravel 5.1 中将异常消息传递给 Queue::failing()?
【发布时间】:2016-02-19 06:07:02
【问题描述】:

使用 Laravel 5.1 的队列,当作业失败时我会抛出异常。

throw new \Exception('No luck');

正如 Laravel 在 dealing with failed jobs 时建议的那样,我正在“捕捉”AppServiceProvider 中的异常,并使用它向我们的团队发送电子邮件。

public function boot()
{
    Queue::failing(function ($connection, $job, $data) {
        $info['data'] = $data;
        \Mail::send('emails.jobs.failed', $info, function($message) {
            $message->to('test@email.com')->subject('Job failed');
        });
    });
}

在电子邮件中,我想放置异常的消息(在本例中为“不走运。”)。但我不知道如何将它传递给 Queue::failing()。

有什么想法吗?

【问题讨论】:

    标签: laravel queue laravel-5.1 ironmq


    【解决方案1】:

    调用失败的回调后,Laravel rethrows the exception

    看来如果你真的需要错误信息,你必须自己捕捉异常。

    【讨论】:

    • 谢谢约瑟夫。我真的想弄清楚为什么要让我们的团队知道为什么工作首先会失败。目前,只收到特定作业失败的通知,没有详细说明原因。有没有更好的方法来做到这一点?
    • @MartyThomas - 我不确定你在问什么。就像我在答案中所说的,您可以捕获异常并在那里发送电子邮件。
    • @MartyThomas - 你遇到这个问题的原因是因为这些失败从来都不是你想要的。队列作业不应使用异常来控制应用程序流。如果由于某种原因您无法执行作业,您应该在作业的处理程序中处理它。 failing 回调用于意外失败(异常仍记录在主应用日志文件中)。
    • 我在问题中使用了异常,因为我认为这是展示我正在尝试做的事情的好方法,但这显然不是很好:) 我在调试为什么工作时遇到了麻烦失败(出乎意料),我认为failing 回调将是解决方案。但也许我以错误的方式思考这个问题。再次感谢您的想法。
    • 大约 4 年后是still the case。顺便说一句,似乎是正确的方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多