Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

Как создать класс задания

Например, допустим, что класс 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 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 добавьте каталог, содержащий все ваши классы заданий, в путь include. Ваши работники автоматически найдут их.

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

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

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

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

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

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

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

Использовать basic include

В папке '/path/to/autoloader.php':

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

Использовать автозагрузчик

Использовать автозагрузчик php для загрузки классов заданий.

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

set_include_path('path/to/job');

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

Закрытие мысли

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

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

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