Laravel 邮件队列无限循环异常
Posted
技术标签:
【中文标题】Laravel 邮件队列无限循环异常【英文标题】:Laravel Mail Queue Infinite Loop on Exception 【发布时间】: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大致相同。
我该如何解决这个问题?有没有其他人遇到过这个错误?
非常感谢任何帮助。
【问题讨论】:
【参考方案1】:你只需要在 Laravel 中尝试几次特定的工作,然后就确定它失败了:
php artisan queue:daemon --tries=3
这样,它将在 3 次尝试后停止处理该特定作业。
【讨论】:
【参考方案2】:任何基于队列的系统的难点在于处理错误,我通过 BeanstalkD 运行了数千万个作业,并通过 SQS 等其他系统运行了更多作业。
有了这个Swift_RfcComplianceException
异常,很明显这项工作将永远无法成功,因此再次尝试将是徒劳的。
其他一些问题可能可以恢复,但无论哪种情况,您都必须将代码包装在 try/catch 块中并尽您所能。
由于没有办法“修复”这个特定问题,我会将发生的事情(异常名称和任何消息以及数据)记录到日志中以进行检查,然后 delete
或 @987654323 @ 工作。如果您在将job-id
埋在日志中时将其存储在日志中,您可以稍后再返回并delete
或kick
该特定作业 - 这将是在能够更改作业发生的情况之后(而不是让它再次失败)。
【讨论】:
以上是关于Laravel 邮件队列无限循环异常的主要内容,如果未能解决你的问题,请参考以下文章
私有队列 NSManagedObjectContext 在无限循环中保存结束