Laravel 4在队列方面有一个很棒的功能列表。这个问题是关于队列方法Queue.later()
API文档的,第一个参数是delay
。
Cron基本上是用来执行重复任务的。
如果下面的片段在时间可配置的情况下变得更通用,也可以:
- 这是否可以作为CRON工作的替代方案
- 假设我们使用IronMQ,这是否是一种故障安全的方法
-
class SendEmail {
public function fire($job, $data)
{
//Connect to SMTP and send email
$job->delete();
//Recall the queue with a delay
Queue::later(60,'SendEmail@send', array('message' => $message));
}
}
//app/events/MailHandler.php
public class MailHandler(){
public function onMailListenerStarted(){
Queue::push('SendEmail@send', array('message' => $message));
}
}
您必须记住,队列和Cron任务是两件不同的事情。
- cron作业将每隔一分钟启动一次(具体取决于您如何配置它)
- 队列作业将在延迟时间结束后运行,并且轮到他进行处理
因此,将其与Cron"执行重复任务"的定义进行比较,Queue并没有这样做。乔布斯只是在排队等候,他们什么也不做。延迟工作会给你一个优势,它至少会等到时间到了再发送,但它不会尝试一次性发送所有电子邮件。如果这样做的缺点是可能需要很长时间才能发送,但为了防止这种情况,您可以简单地使用更多的工作人员来处理队列。
您需要一个处理队列的脚本,您很可能希望从cron开始。
我在代码片段中看到的方法的另一个问题是,如果将作业添加回队列出现问题,则该作业将丢失,并且永远不会添加回队列。
因此,为了回答您的问题:
-
不,队列不是作业的替代方案,但队列确实使cron脚本中的数据处理更容易
-
理论上,无论您的队列提供程序有多好,这都不是故障安全的方法。但是,可以创建一些脚本来检查队列是否仍在执行它应该执行的所有操作,但这确实需要一些日志记录(例如,上次运行作业时保存)。
。。2年后
这是一种防故障的方法吗?Laravel Forge使添加和监督队列工作人员变得非常可靠,大大减轻了的痛苦,值得一看。
所以,是的,不知道是否是故障安全的,但肯定比过去更可靠。