Laravel с Pheanstalkd, Beanstalkd и Supervisor — правильная установка

Я установил Laravel на Centos 6 с пакетом Pheanstalkd:

"laravel/framework": "4.*",
"pda/pheanstalk": "~2.1"

Мой файл конфигурации очереди Laravel:

return array(
     'default' => 'beanstalkd',
     'connections' => array(
             'beanstalkd' => array(
                  'driver' => 'beanstalkd',
                  'host'   => 'localhost',
                  'queue'  => 'default',
                  'ttr'    => 60,
             ),
             ...

     ),
);

Beanstalked был установлен и запущен, а в Supervisor были настроены следующие параметры:

[program:website]
command=php artisan queue:listen --env=production
process_name=%(program_name)s_%(process_num)02d
priority=999
autorestart=true
directory=/var/www/html/
stdout_logfile=/var/www/html/app/storage/logs/website_supervisord.log
numprocs=5
numprocs_start=5
startsecs=0
autostart=true
redirect_stderr=true

[program:testing]
command=php artisan queue:listen --env=production
process_name=%(program_name)s_%(process_num)02d
priority=999
autorestart=true
directory=/var/www/html/
stdout_logfile=/var/www/html/app/storage/logs/testing_supervisord.log
numprocs=5
numprocs_start=5
startsecs=0
autostart=true
redirect_stderr=true

веб-сайт и группа тестирования добавлены и работают

Очередь «по умолчанию» — это та, которая выполняет мои задания, и мне нужно несколько очередей для работы в приложении (например, мой веб-сайт и программы тестирования, созданные в супервизоре). Я пробовал:

Queue::push('TheBigTest', array('message' => $message), 'website');

но не повезло :(

Для получения более подробной информации рядом с вызовом класс выглядит следующим образом:

<?php

class TheBigTest {

    public function fire($job, $data)
    {
        if ($job->attempts() >= 0){
            $job->delete();
        }
        $nr = 1000;
        for ($i=0;$i<=$nr;$i++){
            $newDummy = new Dummy;
            $newDummy->nr = $i;
            $newDummy->other = $i*32;
            $newDummy->save();
        }
        $debug = new Debug;        
        $test = $job->getPheanstalk()->stats();
        $debug->job_execution           = $test["rusage-stime"];
        $debug->job_time                = $test["rusage-utime"];
        $debug->pid                     = $test["pid"];
        $debug->uptime                  = $test["uptime"];
        $debug->job_id                  = $test["id"];
        $debug->max_job_size            = $test["max-job-size"];
        $debug->current_tubes           = $test["current-tubes"];
        $debug->current_connections     = $test["current-connections"];
        $debug->current_workers         = $test["current-workers"];
        $debug->current_waiting         = $test["current-waiting"];
        $debug->total_connections       = $test["total-connections"];
        $debug->total_jobs              = $test["total-jobs"];
        $debug->job_timeouts            = $test["job-timeouts"];
        $debug->debug                   = json_encode($job->getPheanstalk()->listTubeUsed());
        $debug->save();
    }
}

Другая конфигурация, кроме этой, не выполнялась, и я не знаю, как работать с другими очередями.


person BrokenPixel    schedule 28.07.2014    source источник


Ответы (1)


Третий параметр Queue::push, судя по моему чтению документации, является именем очереди (в противном случае будет использоваться имя, установленное в соединении, здесь default). Итак, вы поместили его в трубку website, но не читаете из этой очереди. Если вы покажете список всех используемых трубок (используйте команду list-tubes непосредственно в telnet или эквивалент библиотеки Laravel Queues), вы увидите дополнительные имена трубок, в которых есть задания (помимо «по умолчанию»).

person Alister Bulman    schedule 06.08.2014