Laravel 在拉雷维尔,邮件延迟的可靠性有多高?

Laravel 在拉雷维尔,邮件延迟的可靠性有多高?,laravel,Laravel,我想通知卖方,买方很快会在取货时间前2小时通过邮件到达 我通常会用CRON和数据库表来完成这项工作。每小时检查一次,如果我发现一个订单的取货时间减去2小时,然后才发送邮件 现在,我想知道您是否建议使用排队作业发送邮件 与 我可以延迟排队电子邮件的传递 但这有多安全呢?特别是,如果有人订购了某样东西,但却在两个月内就拿到了,让我们夸大两个月吧 Laravel排队系统是否足够严格,能够在长时间延迟(即2个月)后正常工作 编辑 我使用Redis排队如果说安全,你的意思是可靠,那么它与立即发送电子邮件没

我想通知卖方,买方很快会在取货时间前2小时通过邮件到达

我通常会用CRON和数据库表来完成这项工作。每小时检查一次,如果我发现一个订单的取货时间减去2小时,然后才发送邮件

现在,我想知道您是否建议使用排队作业发送邮件

我可以延迟排队电子邮件的传递

但这有多安全呢?特别是,如果有人订购了某样东西,但却在两个月内就拿到了,让我们夸大两个月吧

Laravel排队系统是否足够严格,能够在长时间延迟(即2个月)后正常工作

编辑


我使用Redis排队

如果说安全,你的意思是可靠,那么它与立即发送电子邮件没什么区别。如果你的服务器有可能打嗝而不发送电子邮件,那么现在的可能性与10分钟后的可能性相同。一旦作业进入队列,它就会一直保留到完成,除非您使用基于内存的驱动程序,如Redis,如果服务器重新启动,它可能会被重置

如果使用的是数据库队列驱动程序或远程服务器,即使服务器短期不可用,排队作业的日志也将保留。即使您希望发送作业的确切时间戳已过期,您的队列也将得到尊重。例如,如果您计划在下午1:00发送电子邮件,但您的服务器在该时刻关闭,当它重新联机时,它仍会看到作业,因为它存储为未完成,并且作业的时间是过去的,这将在队列工作人员下一次检查作业列表时触发作业的执行


当然,这假设您的队列工作程序设置为始终检查作业并自动重新启动,即使在服务器出现故障后也是如此,但这是一个不同的讨论,有很多解决方案……如图所示。

如果您所说的安全是指可靠,那么它与立即发送电子邮件没有什么不同。如果你的服务器有可能打嗝而不发送电子邮件,那么现在的可能性与10分钟后的可能性相同。一旦作业进入队列,它就会一直保留到完成,除非您使用基于内存的驱动程序,如Redis,如果服务器重新启动,它可能会被重置

如果使用的是数据库队列驱动程序或远程服务器,即使服务器短期不可用,排队作业的日志也将保留。即使您希望发送作业的确切时间戳已过期,您的队列也将得到尊重。例如,如果您计划在下午1:00发送电子邮件,但您的服务器在该时刻关闭,当它重新联机时,它仍会看到作业,因为它存储为未完成,并且作业的时间是过去的,这将在队列工作人员下一次检查作业列表时触发作业的执行


当然,这假设您的队列工作程序设置为始终检查作业并自动重新启动,即使在服务器出现故障后也是如此,但这是一个不同的讨论,有很多解决方案……如图所示。

您实际上不必担心。发送邮件通常会增加应用程序的响应时间,因此最好延迟发送

排队是一种方式,在Laravel中设置很容易。Laravel支持一对开箱即用的产品。我建议您先从数据库开始,然后再尝试beanstalk等

最后也是更重要的一点,使用流程管理器(如主管)来监控和维护您的队列工作人员

请看一看,了解更多信息。
干杯

你其实没什么好担心的。发送邮件通常会增加应用程序的响应时间,因此最好延迟发送

排队是一种方式,在Laravel中设置很容易。Laravel支持一对开箱即用的产品。我建议您先从数据库开始,然后再尝试beanstalk等

最后也是更重要的一点,使用流程管理器(如主管)来监控和维护您的队列工作人员

请看一看,了解更多信息。
干杯

如果您使用带有Laravel队列的数据库驱动程序来处理您的电子邮件,那么您无需担心任何事情

只有在作业成功完成时,才会从作业表中删除作业,否则将设置下一次尝试时间(未来几分钟),并且在队列工作器联机时再次执行作业


所以使用Laravel队列是完全安全的

如果您使用带有Laravel队列的数据库驱动程序来处理您的电子邮件,那么您无需担心任何事情

只有在作业成功完成时,才会从作业表中删除作业,否则将设置下一次尝试时间,即未来几分钟,并且作业将被删除 如果队列工作器联机,请重新执行



所以使用Laravel队列是完全安全的

您担心什么?我担心德文郡的邮件不安全。如果队列崩溃会发生什么情况,它还记得以后要做什么吗?有不同的队列驱动程序可用。您关心什么?为什么不认为安全?@Devon我只是担心邮件没有发送。如果队列崩溃会发生什么情况,它还记得以后要做什么吗?有不同的队列驱动程序可用。好的,我明白了!实际上,我正在使用Redis排队。忘了说了。所以你建议用数据库来排队?这对双方都有好处,但是如果可靠性是你的首要任务,你可以考虑开关。尽管如此,我认为使用Redis不会有任何问题。您还可以创建自己的手动数据库表,用于监视您发送的每封电子邮件,并确保每封邮件最终都会被发送。好的,我明白了!实际上,我正在使用Redis排队。忘了说了。所以你建议用数据库来排队?这对双方都有好处,但是如果可靠性是你的首要任务,你可以考虑开关。尽管如此,我认为使用Redis不会有任何问题。您还可以创建自己的手动数据库表,监视您发送的每封电子邮件,并确保每封邮件最终都会被发送。忘了说我正在使用Redis。所以我想我会使用数据库发送邮件只是为了安全。哈哈。。。无论是数据库、Redis、Beanstalk等,您应该担心的主要问题是确保队列工作人员不会失败。您可以通过使用过程监视器(如监督员)来确保他们不受影响。如果队列失败,主管将重新启动队列:工作进程。在某种程度上,速度和可伸缩性等问题对您来说将变得非常重要。到时候做好进一步的研究,我会做的。好的,很高兴知道。还不清楚如果redis失败,redis是如何记住所有作业的,因为我认为它只是基于内存的,不像数据库。是的,redis是内存中的数据存储,但它也有保存数据的能力。您可以阅读他们关于数据持久性的文档以了解更多信息。您可以在开发环境中使用数据库,但在生产级别,我建议您使用Beanstalkd、RabbitMQ、SQS。。。这些家伙专门排队……忘了说我在用Redis。所以我想我会使用数据库发送邮件只是为了安全。哈哈。。。无论是数据库、Redis、Beanstalk等,您应该担心的主要问题是确保队列工作人员不会失败。您可以通过使用过程监视器(如监督员)来确保他们不受影响。如果队列失败,主管将重新启动队列:工作进程。在某种程度上,速度和可伸缩性等问题对您来说将变得非常重要。到时候做好进一步的研究,我会做的。好的,很高兴知道。还不清楚如果redis失败,redis是如何记住所有作业的,因为我认为它只是基于内存的,不像数据库。是的,redis是内存中的数据存储,但它也有保存数据的能力。您可以阅读他们关于数据持久性的文档以了解更多信息。您可以在开发环境中使用数据库,但在生产级别,我建议您使用Beanstalkd、RabbitMQ、SQS。。。这些家伙是专门排队的……是的,这正是我担心的地方,因为我使用的redis没有作业表。但是很高兴知道!是的,这正是我担心的地方,因为我使用的redis没有作业表。但是很高兴知道!
$when = now()->addDays(10); //I would dynamically set the date

Mail::to($order->seller())
    ->later($when, new BuyerIsComing($order));