0

考虑这种将任务推送到队列以运行位于同一类中的自定义处理程序方法的代码:

<?php namespace Space;

class Spaceship {

    public static function cruise()
    {
        // Throtting in 3 seconds...
        Queue::later(3, '\Space\Spaceship@throttle', $coordinates, 'queue-name');
    }

    public static function throttle($job, $data)
    {
        $job->delete();
        return 'ok';
    }

}

在我添加 $job->delete(); 之前这工作正常;但现在它给出了一个错误:

exception 'Symfony\Component\Debug\Exception\FatalErrorException' with message 'Call to a member function delete() on a non-object

Laravel 4.2 文档中,没有解释为什么使用指向自定义处理程序方法的推送队列任务,您不需要使用 $job->delete() 从队列中显式删除任务?然而,这种实现是有效的,当记录 $job 参数时,它是错误的。

4

1 回答 1

1

app\config\queue.php检查default钥匙。如果后者设置为sync,则预期会出现上述行为。

syncdriver 立即运行你的任务,这意味着,Queue::later是真的Queue::push

尝试将您的转换Queue::laterQueue::push,代码将运行而不会出现错误。

至于显式删除队列中的任务,大部分是不必要的。但是,您必须考虑不提供自动删除作业的队列服务。

就我而言,AWS SQS(消息队列服务)会在将作业从队列管中拉出后自动删除它。

于 2015-01-20T04:35:44.160 回答