我正在开发一个类似于mailchimp的应用程序,我认为这是处理大量电子邮件发送的最佳实践
有一个字母模型,那个hasMany列表,以及一个hasMany联系的列表模型。
1-当用户向某些列表发送新闻稿(每个列表包含多个订阅联系人)时,一个新作业将使用Queue::push排队,处理此作业的函数只使用for循环(而不是foreach)来迭代属于这个字母的每个列表的多个联系人(这是该解决方案中最糟糕的)。
2-对于每个联系人,我使用Mail::queue将邮件发送到此特定联系人
3-我使用beanstalkd和Amazon
问题是,我对使用a for迭代联系人有不好的感觉,即使整个进程都在排队,如果作业在发送到x联系人后的某个点失败怎么办?这是否意味着当它重新启动时,它会再次向相同的联系人发送相同的电子邮件?
如果有人能提出处理这种情况的最佳做法,我将不胜感激。
发布于 2014-05-21 07:56:55
另外,如果任务在发送到x联系人后的某个点失败,会发生什么情况?
如果你使用Mail::queue(),它会将每封电子邮件排队作为自己的工作。如果作业失败,将只重试该单个作业。一旦每封邮件被发送,它将从队列中删除。
解决这个问题的方法有很多,但我认为你的方法似乎还可以。
别忘了队列中的失败作业部分。您可以创建一个失败的表,并告诉您的队列有多少次尝试重新发送失败的电子邮件。
php artisan queue:retry 3如果作业失败超过3次,它将停止尝试,并将其放在失败的表中,供您手动管理。如果需要,也可以删除失败的作业。
php artisan queue:forget 3发布于 2018-07-04 22:55:01
如果您按照Laurence的建议发送大量电子邮件,您可以使用缓存计数器,如果队列失败,则检查缓存计数并从那里开始。另一种选择是使用Laravel ()将10000个联系人分成不同的块,这样每个块就会有数量有限的电子邮件。
https://stackoverflow.com/questions/23776927
复制相似问题