队列工作在“同步”驱动程序上,但不在Beanstalkd上

时间:2013-10-22 16:57:04

标签: php laravel queue laravel-4 beanstalkd

我有一个非常简单的job在Laravel 4 FW上运行。当队列驱动程序设置为“sync”时,它可以正常工作。但是,当我把它设置为'beanstalkd'时,它根本就没有运行!我已经运行了工匠命令php artisan queue:listenphp artisan queue:work,但似乎都没有。

当我输入php artisan queue:work时,它会给我以下错误:

[ErrorException]                      
Trying to get property of non-object  

这是我的beanstalkd连接配置:

'beanstalkd' => array(
    'driver' => 'beanstalkd',
    'host'   => 'localhost:11300',
    'queue'  => 'default',
),

我已经尝试将'host'设置为'0.0.0.0'和'127.0.0.1'。

任何想法为什么不起作用?

编辑:
这是fire()方法的一些代码。

static public function fire($job, $data)
{
    ini_set('memory_limit', '512M');
    set_time_limit(300);

    $hotel_ids = $data['hotels'];
    self::$client    = $data['client'];
    self::$currency  = $data['currency'];

    // A list of paths to the generated PDFs
    $paths = array();

    foreach ($hotel_ids as $list) {
        $hotels =  Hotel::whereIn('id', $list)->orderBy('name', 'asc')->get();

        $paths[] = self::makePDF($hotels);  
    }

    #self::sentPDFs($paths);

    $job->delete();
}

编辑2:
作业本身在同步驱动程序上运行,但我的想法是关于beanstalkd。我安装了beanstalkd控制台,一种以图形方式查看作业和队列的方法。这是另一个有趣的事情:工作排队,他进入“准备”阶段然后回去!而这一直在继续!他进入了准备阶段,然后(我相信)发生了某种错误而且它已经消失了!我不知道错误是什么,因为它没有出现在SYNC驱动器中。

另一件有趣的事情:如果我从fire方法中删除所有代码,并且只允许,例如,Log::error('Error');它就会发生同样的事情!

2 个答案:

答案 0 :(得分:0)

你有installed Pheanstalk吗?需要将beanstalkd与Laravel队列系统一起使用。

答案 1 :(得分:0)

检查防火墙配置。我将端口11300添加到防火墙表中,它可以工作!