Laravel 4队列的问题

Str*_*ren 1 php queue jobs frameworks laravel

我是第一次在L4中设置队列,我遇到了一些问题.我有这样简单的控制器方法:

public function getIndex()
{
    $data = array(
        'offset' => 3300000,
        'site'   => 1
    );
    Queue::push('Class@jobmethod', $data);
    return 'OK!';
}
Run Code Online (Sandbox Code Playgroud)

在作业方法的底部,我做这样的事情:

public function jobmethod()
{
    ....
    $data = array(
        'offset' => $data['offset'] + 100,
        'site'   => $data['site']
    );
    Queue::push('Class@jobmethod', $data);
    $job->delete();
}
Run Code Online (Sandbox Code Playgroud)

因此,作业再次以更高的偏移量循环遍历队列.现在我的问题是,当我在浏览器中调用控制器方法时,它将永远不会返回OK!,但只是继续加载页面?我将作业设置为登录数据库表,我可以看到它持续运行了几次.

有没有人知道这里发生了什么?

Nic*_*aag 9

我猜你的默认队列处理程序设置为"sync".你可以在app/config/queue.php中查看.

这样做直接处理事件,因为没有安装实际队列.

因此,在您的情况下,它将不断运行jobmethod,因为它不断迭代相同的函数.如果在jobmethod中删除Queue push,它将返回OK.

所以要做到这一点,你必须安装像Beanstalkd这样的排队系统.如果这样做,请确保添加"pda/pheanstalk": "dev-master"composer.json的require部分.

如果你想运行队列,请查看我的答案:如何使用beanstalkd解雇Laravel队列