1

Laravel 4 在队列方面有很多功能。这个问题是关于队列方法Queue.later() API 文档的第一个参数是delay.

Cron 基本上用于执行重复性任务。

如果下面的代码片段在时间可配置的情况下变得更通用,那么也可以:

  1. 这可以用作 CRON 工作的替代品吗?
  2. 假设我们使用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));    
    }
}
4

2 回答 2

5

您必须记住,排队和 Cron-tasking 是两件不同的事情。

  • 一个 cron 作业将每隔一分钟开始(取决于您如何配置它)。
  • 延迟时间结束后将运行队列作业并且轮到他处理。

因此,要将其与您对 Cron“执行重复任务”的定义进行比较,队列并没有这样做。作业只会在队列中等待,他们什么也不做。延迟的工作会给你一个优势,它至少会等到有时间发送它,但它不会尝试一次性发送所有电子邮件。如果这样做的缺点是它可能需要很长时间才能发送,但为了防止这种情况,您可以简单地使用更多的工作人员来处理队列。

而且您需要一个处理队列的脚本,您很可能希望从 cron 开始。

我在代码片段中看到的另一个问题是,如果将作业添加回队列时出现问题,则作业将丢失,并且永远不会被添加回队列。

所以回答你的问题:

  1. 不,队列不是作业的替代品,但队列确实使 cron 脚本中的数据处理更容易

  2. 从理论上讲,无论您的队列提供程序有多好,这都不会是故障安全方法。但是可以创建一些脚本来检查队列是否仍在做它应该做的一切,但这确实需要一些日志记录(例如,当作业最后一次运行时保存)。

于 2013-07-16T10:31:07.020 回答
0

..2年后..

这会是故障安全方法吗?Laravel Forge 使添加和监督队列工作器变得非常可靠并且那么痛苦,值得一试。

所以是的,不知道是否有故障安全,但绝对比以前更可靠。

于 2015-02-03T11:44:50.057 回答