【问题标题】:Queue::later() not working on LaravelQueue::later() 不适用于 Laravel
【发布时间】:2014-11-27 21:16:33
【问题描述】:

我正在研究 Laravel 框架,但我遇到了一些队列问题。 Laravel 提供了一个统一的 API 来处理队列,我正在研究它。 Laravel 提供的方法之一是Queue::later(DateTime|int $delay, string $job, mixed $data = '', string $queue = null);

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

<?php

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

以上,我登录一个文件,收到参数。只是想知道它是否有效。我的控制器使用 Queue API 以这种方式调用作业:

<?php

class MyControllerController extends BaseController {

    function index() {
        LOG::debug('Index action STARTED');
        $date = Carbon::now()->addMinutes(2);
        Queue::later($date, 'SendEmail@send', 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! [] []

我的代码有什么问题?

【问题讨论】:

    标签: php laravel-4 queue


    【解决方案1】:

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

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

    我会尝试beanstalkd

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-08
      • 2015-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多