【问题标题】:Laravel Mail Queue Infinite Loop on ExceptionLaravel 邮件队列无限循环异常
【发布时间】:2015-07-13 13:20:21
【问题描述】:

各位程序员大家好,祝大家早上好。

情况

Laravel 很棒。 Laravel 邮件队列和 beanstalkd 集成很棒。我几乎没有时间让一切正常工作。阳光明媚,没有下雨。太棒了。

发送电子邮件时抛出异常除外。然后这封邮件被一次又一次地处理,异常也被一次又一次地抛出。

无限循环。

如果我没有在数据库中植入无效数据,我想我什至不会注意到这一点。验证通常会解决这个问题,像 361FlorindaMatthäi@gmail.com 这样的电子邮件不会出现以下异常:

[Swift_RfcComplianceException]
给定邮箱中的地址 [361FlorindaMatthäi@gmail.com] 没有 遵守 RFC 2822, 3.6.2。

但是,例如,当我的 mandrill 帐户达到其限制或我的服务器失去互联网连接时,验证不会被注意。异常将其发送到无限循环中。

在这个阳光明媚、一切都很好的世界里,工作必须被标记为埋葬或暂停,并且应该处理下一封电子邮件。带有无效电子邮件地址的无限循环并不好。

基本上您的应用程序不再发送任何电子邮件。这家伙的issue大致相同。

我该如何解决这个问题?有没有其他人遇到过这个错误?

非常感谢任何帮助。

【问题讨论】:

    标签: email laravel laravel-4 mandrill beanstalkd


    【解决方案1】:

    你只需要在 Laravel 中尝试几次特定的工作,然后就确定它失败了:

    php artisan queue:daemon --tries=3
    

    这样,它将在 3 次尝试后停止处理该特定作业。

    【讨论】:

      【解决方案2】:

      任何基于队列的系统的难点在于处理错误,我通过 BeanstalkD 运行了数千万个作业,并通过 SQS 等其他系统运行了更多作业。

      有了这个Swift_RfcComplianceException 异常,很明显这项工作将永远无法成功,因此再次尝试将是徒劳的。

      其他一些问题可能可以恢复,但无论哪种情况,您都必须将代码包装在 try/catch 块中并尽您所能。

      由于没有办法“修复”这个特定问题,我会将发生的事情(异常名称和任何消息以及数据)记录到日志中以进行检查,然后 delete 或 @987654323 @ 工作。如果您在将job-id 埋在日志中时将其存储在日志中,您可以稍后再返回并deletekick 该特定作业 - 这将是在能够更改作业发生的情况之后(而不是让它再次失败)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-30
        • 2016-09-09
        • 2014-12-21
        • 1970-01-01
        • 2018-08-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多