Как правильно настроить и использовать php-resque?

Я пытаюсь использовать php-resque для очереди и выполнения преобразований ffmpeg на моем сервере. Я понимаю в целом, как это должно работать, но у меня возникли проблемы с деталями и не могу найти никаких учебников. В частности, я не понимаю, где я должен разместить свои рабочие классы, и как дать классы моим рабочим и начать моих рабочих. В read me only говорится: "получение вашего приложения также включает в себя рассказ о ваших рабочих классах с помощью либо автозагрузчик или включая их."

надеюсь, кто-то может описать общую структуру использования php-resque.

2 ответов


вы можете поместить свои классы работы, где вы хотите. Это будет зависеть от структуры приложения.

как создать класс задание

например, предположим, что класс VideoConversion, используется для преобразования ffmpeg.

class VideoConversion {

    public function perform() {
        // The code for video conversion here
    }

}

в вашем основном приложении, перед использованием php-resque, скажем, у вас есть что-то вроде этого

public function uploadVideo() {
    // Upload and move the video to a temp folder
    // Convert the video
}

и вы хотите запросить часть "конвертировать видео". Давайте просто очереди к convert очередь:

public function uploadVideo() {
    // Upload and move the video to a temp folder
    // Let's suppose you need to convert a 'source video' to a 'destination video'
    Resque::enqueue('convert', 'VideoConversion', array('origine-video.avi', 'destination-video.avi'));
}

при очереди задания мы передали путь к исходному и целевому видео в класс VideoConversion. Вы можете передать другой аргумент, это будет зависеть от того, как написан ваш класс VideoConversion.

работник будет опрашивать convert очереди, и выполнить VideoConversion работа. Что будет делать работник, так это создать экземпляр класса VideoConversion и выполнить perform() метод.

доводы работу (array('origine-video.avi', 'destination-video.avi')), третий аргумент когда очередь на работу с Resque::enqueue, будет доступен внутри perform() способ через $this->args.

# VideoConversion.php
class VideoConversion
{
    public function perform() {
    // $this->args == array('origine-video.avi', 'destination-video.avi');
    // Convert the video
}

найти свои классы работы

на VideoConversion класс можно поставить в любом месте, но вы должны сказать своим работникам, где его найти. Есть несколько способов сделать это

поместите классы заданий в include_path

в свой .htaccess или Apache config, добавьте каталог, содержащий все ваши классы заданий, в путь включения. Ваши работники будут автоматически найти их.

основная проблема с этим методом заключается в том, что все ваши классы заданий должны находиться в одной папке и что все ваши классы заданий доступны везде.

скажите каждому работнику, где найти свои классы работы

при запуске рабочего используйте APP_INCLUDE аргумент для указания на классы заданий 'autoloader'.

APP_INCLUDE=/path/to/autoloader.php QUEUE=convert php resque.php

вышеуказанная команда запустит нового работника, опросив очередь с именем convert. Мы также проходим мимо файл / path/to / автозапуск.в PHP работнику. (смотрите здесь, чтобы научиться запускать работника)

технически, работник будет включать этот файл с include '/path/to/autoloader.php';.

затем вы можете рассказать рабочим, как найти свои классы работы:

используйте basic include

в ' /path/to / автозапуск.php':

include /path/to/VideoConversion.php
include /path/to/anotherClass.php
...

используйте автозапуск

используйте php autoloader для загрузки ваши классы задания.

использовать set_include_path()

set_include_path('path/to/job');

таким образом, ваши рабочие места в include_path только для этого работника.

заключение

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

вы также можете создавать свои классы заданий для выполнения нескольких заданий. Есть учебник объясняя, как это сделать. Он охватывает от основы системы очередей до того, как ее использовать и реализовать.

если этого все еще недостаточно, взгляните на документацию resque. PHP-resque API точно такой же. Единственное отличие заключается в том, что классы заданий Resque написаны на Ruby, тогда как php-resque-на php.


привет пожалуйста, проверьте следующий учебник о том, как использовать resque с phalcon. http://www.mehuldoshi.in/background-jobs-phalcon-resque/