Я написал своего потребителя в очередь Beanstalkd, запустив его с Supervisord.Как правильно установить тайм-ауты для очередей?
php5.5-sp %appdir%/worker
worker
это PHP-файл, цикл с 1 секунды продолжительности сна. Что-то вроде:
#!/usr/bin/env php
<?php
while(true)
{
echo time() . PHP_EOL;
exec("php5.5-sp -d max_execution_time=30 job");
sleep(1);
}
job
(файл) использует Beanstalkd, выскакивает работу, пытается обработать его.
// job
require __DIR__.'/vendor/autoload.php';
# Initialize beanstalkd
$beanstalkd = new Illuminate\Queue\Worker($queue->getQueueManager(), null, null);
try {
$beanstalkd ->pop('default', 'default', 2, 8192);
} catch (Exception $e) {
Log::critical($e->getMessage());
}
queue
как это:
<?php namespace Aristona\Queue;
class ArticleParserService
{
public function fire($job, Array $data)
{
// Do some time taking stuff
}
}
Все работает должным образом. Проблема в том, что иногда я ожидаю тайм-аут (например, на сайте, который я пытаюсь получить, есть цикл перенаправления), но очередь просто работает навсегда. Поскольку это не останавливается, остальные очереди блокируются.
Я пробовал:
не Добавление
-d max_execution_time=30
, никакого эффекта.Установка
max_execution_time
на очереди, бездействия.Установка
ttr
до 30 секунд при конфигурации Beanstalkd, бездействия.
Я не знаю, что еще мне нужно делать?
Бревна, как это:
sudo supervisord > tail -f queue
Worker is looping on [production] at 1425389013...
Worker is looping on [production] at 1425389016...
Worker is looping on [production] at 1425389017...
Worker is looping on [production] at 1425389019...
Worker is looping on [production] at 1425389023...
Worker is looping on [production] at 1425389027... (stuck here forever)
vi debug.log
DEBUG - 2015-03-03 08:23:59 :: There is no image in the feed. Attempting to guess it.
DEBUG - 2015-03-03 08:23:59 :: Guessing image from URL: https://www.aksent-tercume.com/di%c4%9fer-diller/212-dilde-seni-seviyorum-de/
DEBUG - 2015-03-03 08:24:01 :: Guessed an appropriate image!
DEBUG - 2015-03-03 08:24:01 :: Validating image size...
Часть с «Проверка размера изображения ...», где все останавливается навсегда, и он всегда находится в том же URL. (https://www.aksent-tercume.com/di%c4%9fer-diller/212-dilde-seni-seviyorum-de/)
Весь скрипт подключается к URL-адресу, находит наиболее подходящее изображение для статьи, а затем проверяет его размер, чтобы убедиться, что он больше 60x60 пикселей. Но по какой-то причине он просто останавливается там, навсегда блокируя наши очереди. Я не могу получить его до таймаута. Только следующие очереди возвращаются в нормальное состояние.
sudo service beanstalkd restart
sudo supervisorctl > restart all
Любые идеи?