2014-10-02 39 views
1

我正在学习Laravel框架,并且遇到了一些队列问题。 Laravel提供了一个统一的API来处理队列,我正在研究它。其中一个是Laravel提供的方法是Queue::later(DateTime|int $delay, string $job, mixed $data = '', string $queue = null);队列:: later()对Laravel不起作用

所以,我实现了我的作业类:

<?php 

class SendEmail { 
    public function send($job, $data) { 
     Log::info('JOB: ' . $job->getName()); 
     Log::info('DATA: ' . $data['message']); 
    } 
} 

上面,我登录一个文件,接收到的参数。只是为了知道它是否工作。我的控制器调用的工作这种方式使用队列API:

<?php 

class MyControllerController extends BaseController { 

    function index() { 
     LOG::debug('Index action STARTED'); 
     $date = Carbon::now()->addMinutes(2); 
     Queue::later($date, '[email protected]', array('message' => 'MY MESSAGE!')); 
     $view = View::make('index'); 
     LOG::debug('Index action FINISHED'); 
     return $view; 
    } 
} 

就拿我使用Queue::later()看看。我预计类别SendEmail的方法send()将在2分钟后执行。 那么,我完成了一个空白的视图,并设置了路线。然后我向我的控制器发出GET请求,然后我去检查日志文件。

我看到这个,当我打开日志文件:

[2014-10-02 16:23:11] production.DEBUG: Index action STARTED [] [] 
[2014-10-02 16:23:11] production.INFO: JOB: [] [] 
[2014-10-02 16:23:11] production.INFO: DATA: MY MESSAGE! [] [] 
[2014-10-02 16:23:11] production.DEBUG: Index action FINISHED [] [] 

一切在同一时间执行,包容性的工作。 Queue::later()不会延迟执行。我认为我的日志文件应该是:

[2014-10-02 16:23:11] production.DEBUG: Index action STARTED [] [] 
[2014-10-02 16:23:11] production.DEBUG: Index action FINISHED [] [] 
[2014-10-02 16:25:11] production.INFO: JOB: [] [] 
[2014-10-02 16:25:11] production.INFO: DATA: MY MESSAGE! [] [] 

我的代码有什么问题?

回答

5

对不起,刚发现我的错误。我正在使用sync驱动程序,这意味着作业在创建作业时执行。我睁开/app/config/queue.php发现:

'sync' => array(
    'driver' => 'sync', 
), 

我将与beanstalkd尝试。