我正在用PHP + Laravel + MySQL编写一个Web应用程序。
在系统中,用户可以在任意时间安排电子邮件(和其他API调用)(非常类似于您在WordPress中安排帖子的方式)。我可以使用CRON每5分钟检查一次数据库,以查找应该发送的电子邮件,发送它们,并更新它们的状态。
但是,这是一个SaaS应用程序。因此,在特定时间发送的电子邮件数量可以快速增长。每次运行CRON脚本时,我都可以创建一个“锁定文件”,这样一次只能运行一个实例。脚本完成执行后,将删除锁定文件。
但是对于潜在的大数据,我想要一种同时处理多个消息的方法,可能使用多个“工作者”。是否有任何现有的解决方案来管理这样的队列?
答案 0 :(得分:2)
是的!你正在寻找Task/Message/Job个队列!它们允许您将各种任务放在队列中,您可以从中检索它们并处理它们,此过程可以水平扩展,因为每个工作程序在完成前一个任务后都可以执行任务。
你应该让cron可能每分钟/两分钟只上传任务和需要做什么。这将确保cron非常快。
看一下Iron.io这是网站的摘录,它对这些系统进行了很好的概述:
易于使用的可扩展任务队列,为云开发人员提供支持 卸载前端任务,运行预定作业和处理的简单方法 背景和规模的任务。
Gearman也是一个很好的解决方案,您可以自己使用并且非常简单。您可以使用多种不同的语言发送消息,并使用不同的语言来处理它。说PHP - > C等......
Wikipedia link会告诉你需要知道的一切,这里有一个快速摘录:
消息队列提供异步通信协议, 意味着消息的发送者和接收者不需要 与消息队列同时进行交互。邮件放在上面 存储队列直到收件人检索它们。