2014-10-02 80 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嘗試。