Как настроить Beanstalkd с PHP

Недавно я исследовал использование Beanstalkd с PHP. Я довольно много узнал, но у меня есть несколько вопросов о настройке на сервере и т. Д.

Вот как я вижу, как это работает:

  1. Я устанавливаю Beanstalkd и любые зависимости (например, libevent) на свой сервер Ubuntu . Затем я запускаю демон Beanstalkd (который должен работать постоянно).
  2. Где-то на моем веб-сайте (например, когда пользователь выполняет какие-то действия и т. Д.) Задачи добавляются в различные трубки в очереди Beanstalkd.
  3. У меня есть сценарий bash (например, следующий), который запускается как демон, который в основном выполняет сценарий PHP.

     #! / Bin / sh 
    php worker.php 
     

4) Рабочий сценарий должен иметь что-то вроде этого для выполнения задач в очереди:

while(1) {
  $job = $this->pheanstalk->watch('test')->ignore('default')->reserve();
  $job_encoded = json_decode($job->getData(), false);
  $done_jobs[] = $job_encoded;
  $this->log('job:'.print_r($job_encoded, 1));
  $this->pheanstalk->delete($job);
}

Вот мои вопросы, основанные на приведенной выше настройке (которые меня поправят, если я ошибаюсь):

  1. Скажем, у меня есть задача импортировать RSS-канал в базу данных или что-то в этом роде. Если 10 пользователей сделают это одновременно, все они окажутся в очереди в «пробирке». Однако тогда они будут казнены только по одному. Было бы лучше иметь 10 разных трубок, работающих одновременно?

  2. Если мне нужно больше трубок, значит ли это также, что мне нужно 10 рабочих скриптов? По одному для каждой трубки, и все они работают одновременно с одним и тем же кодом, за исключением строкового литерала в функции watch ().

  3. Если я запускаю этот сценарий как демон, как это работает? Будет ли он постоянно выполнять скрипт worker.php? Этот сценарий повторяется до тех пор, пока теоретически очередь не станет пустой, так что не следует ли запускать его только один раз? Как демон решает, как часто запускать worker.php? Это просто настройка?

Спасибо!

12
задан Maciej Łebkowski 1 August 2013 в 14:17
поделиться