使用PHP+;MySQL+;克朗

使用PHP+;MySQL+;克朗,php,laravel,task-queue,Php,Laravel,Task Queue,我正在用PHP+Laravel+MySQL编写一个web应用程序 在该系统中,用户可以在任意时间安排电子邮件(和其他API调用)(很像您在WordPress中安排帖子的方式)。我可以使用CRON每隔5分钟左右检查一次数据库,查找应该发送的电子邮件,发送它们,并更新它们的状态 然而,这是一个SaaS应用程序。因此,在特定时间发送的电子邮件数量可能会快速增长。我可以在每次运行CRON脚本时创建一个“锁文件”,以便一次只运行一个实例。脚本完成执行后,锁定文件将被删除 但是,对于潜在的大数据,我需要一种

我正在用PHP+Laravel+MySQL编写一个web应用程序

在该系统中,用户可以在任意时间安排电子邮件(和其他API调用)(很像您在WordPress中安排帖子的方式)。我可以使用CRON每隔5分钟左右检查一次数据库,查找应该发送的电子邮件,发送它们,并更新它们的状态

然而,这是一个SaaS应用程序。因此,在特定时间发送的电子邮件数量可能会快速增长。我可以在每次运行CRON脚本时创建一个“锁文件”,以便一次只运行一个实例。脚本完成执行后,锁定文件将被删除

但是,对于潜在的大数据,我需要一种同时处理多条消息的方法,可能使用多个“工作者”。是否有任何现有的解决方案来管理这样的队列?

是的!排队就是你要找的!它们允许您将各种任务放在队列中,您可以从队列中检索并处理它们。此过程可以水平扩展,因为每个工作人员可以在完成前一个任务后提取任务

您应该让cron每分钟/两分钟上传一次任务和需要完成的工作。这将确保cron非常快

请看以下网站摘录,该摘录对这些类型的系统进行了很好的概述:

易于使用的可扩展任务队列,为云开发人员提供了 卸载前端任务、运行计划作业和流程的简单方法 在后台和大规模执行任务

这也是一个很好的解决方案,你可以自己使用,非常简单。您可以用多种不同的语言发送消息,并使用不同的语言进行处理。说PHP->C等

将告诉您需要知道的一切,这里是一个快速摘录:

消息队列提供异步通信协议, 意思是消息的发送者和接收者不需要 同时与消息队列交互。放置在 队列将一直存储,直到收件人检索到它们


好问题!等待答复谢谢您的答复!另一种方法是使用单个cron作业获取挂起的任务,然后将它们推送到beanstalkd(Laravel支持这一点)。但是,是否可以让多个cron作业同时将挂起的任务推送到队列中?我们遇到了多个“cron拉具”之间的潜在竞争条件。是的,您可以同时将任务推送到队列中,工人/作业系统的全部好处是,每个人从队列中拉出一定数量的任务。看看这个图表:,您可以拥有任意数量的使用者来处理任务。这些系统旨在消除这种竞争问题。每个工作人员不会同时拉取整个队列,只拉取一组项目,例如1。