在我的laravel服务器邮件有时无法交付给收件人,我想重新发送这些电子邮件,直到他们成功发送给他们,我想在不使用数据库帮助的情况下为整个应用程序进行全局管理。P.S.我在Laravel 6.2中使用了Laravel默认的邮件助手函数我尝试过在所有使用邮件辅助函数的地方使用try catch,但从代码的Angular 来看,这是一个长而奇怪的东西。
5m1hhzi41#
简单的方法是增加尝试次数,如果作业失败,它将自动再次运行,直到它完成或耗尽它的尝试。按队列命令。
php artisan queue:work --tries=3
或者由作业上的一个属性,如果需要跨多个作业,一个抽象类将使它在多个作业中使用起来相当容易。
class YourJob { public $tries = 5; }
既然我假设你已经知道重试,一种更广泛的逻辑。将是在失败后再次分派作业的选项,请小心,因为如果错误持续,这可能无法正确处理并继续生成作业。挂接到作业的failed方法以创建逻辑,如果作业失败,将触发此操作。为了避免重新生成所有作业,需要对要再次运行的异常进行一些Assert。
class YourJob { public function failed(Throwable $exception): void { if ($exception instanceof EmailSendFailed) { dispatch(new YourJob($this->someProperty)); } } }
失败的方法解决方案不会被认为是最佳方法,而更像是创建一些更高级案例的方法。
1条答案
按热度按时间5m1hhzi41#
简单的方法是增加尝试次数,如果作业失败,它将自动再次运行,直到它完成或耗尽它的尝试。
按队列命令。
或者由作业上的一个属性,如果需要跨多个作业,一个抽象类将使它在多个作业中使用起来相当容易。
既然我假设你已经知道重试,一种更广泛的逻辑。将是在失败后再次分派作业的选项,请小心,因为如果错误持续,这可能无法正确处理并继续生成作业。挂接到作业的failed方法以创建逻辑,如果作业失败,将触发此操作。为了避免重新生成所有作业,需要对要再次运行的异常进行一些Assert。
失败的方法解决方案不会被认为是最佳方法,而更像是创建一些更高级案例的方法。