¿Cuál es la forma correcta de configurar y usar php-resque?
(2)
Hola. Por favor, consulte el siguiente tutorial sobre cómo usar resque con phalcon. http://www.mehuldoshi.in/background-jobs-phalcon-resque/
Estoy tratando de usar php-resque para php-resque en cola y ejecutar conversiones ffmpeg en mi servidor. Comprendo ampliamente cómo debería funcionar, pero tengo algunos problemas con los detalles y no puedo encontrar ningún tutorial. Específicamente, no entiendo dónde debo ubicar mis clases de trabajo, y cómo dar las clases a mis trabajadores y comenzar a trabajar con ellos. El mensaje "Léame" solo dice "Poner en marcha su solicitud también incluye decirle al trabajador sus clases de trabajo, ya sea mediante un autocargador o incluyéndolos".
Esperemos que alguien pueda delinear la estructura general del uso de php-resque.
Puedes poner tus clases de trabajo donde quieras. Dependerá de la estructura de tu aplicación.
Cómo crear una clase de trabajo
Por ejemplo, supongamos que la clase VideoConversion
, utilizada para la conversión ffmpeg.
class VideoConversion {
public function perform() {
// The code for video conversion here
}
}
En tu aplicación principal, antes de usar php-resque, digamos que tienes algo así.
public function uploadVideo() {
// Upload and move the video to a temp folder
// Convert the video
}
Y desea poner en cola la parte ''convertir video''. Vamos a ponerlo en la cola de 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''));
}
Al poner en cola el trabajo, pasamos la ruta al video de origen y destino a la clase VideoConversion. Puede pasar otro argumento, dependerá de cómo se escriba su clase VideoConversion.
A continuación, un trabajador sondeará la cola de convert
y ejecutará el trabajo de VideoConversion
. Lo que el trabajador hará es crear una instancia de la clase VideoConversion y ejecutar el método perform()
.
Los argumentos del trabajo ( array(''origine-video.avi'', ''destination-video.avi'')
), tercer argumento al Resque::enqueue
en cola el trabajo con Resque::enqueue
, estarán disponibles dentro del método perform()
través de $this->args
# VideoConversion.php
class VideoConversion
{
public function perform() {
// $this->args == array(''origine-video.avi'', ''destination-video.avi'');
// Convert the video
}
Encuentra tus clases de trabajo
La clase VideoConversion
se puede ubicar en cualquier lugar, pero tiene que decirle a sus trabajadores dónde encontrarla. Hay múltiples maneras de hacer eso
Ponle clases de trabajos en el include_path
En su .htaccess o la configuración de apache, agregue el directorio que contiene todas sus clases de trabajo a la ruta de inclusión. Tus trabajadores los encontrarán automáticamente.
El principal problema con este método es que todas las clases de sus trabajos deben estar en la misma carpeta y que todas las clases de sus trabajos están disponibles en todas partes.
Dígale a cada trabajador dónde encontrar sus clases de trabajo
Al iniciar el trabajador, use el argumento APP_INCLUDE
para apuntar a las clases de trabajo ''autoloader''.
APP_INCLUDE=/path/to/autoloader.php QUEUE=convert php resque.php
El comando anterior iniciará un nuevo trabajador, encuestando la cola denominada convert
. También estamos pasando el archivo /path/to/autoloader.php al trabajador. ( ver aquí para aprender a iniciar un trabajador )
Técnicamente, el trabajador incluirá ese archivo con include ''/path/to/autoloader.php'';
.
Luego puede decirles a los trabajadores cómo encontrar sus clases de trabajo:
Usar básico incluye
En ''/path/to/autoloader.php'':
include /path/to/VideoConversion.php
include /path/to/anotherClass.php
...
Utiliza un autocargador
Utilice php autoloader para cargar sus clases de trabajo.
Utilice set_include_path()
set_include_path(''path/to/job'');
De esa manera, sus trabajos están en include_path
solo para este trabajador.
Pensamiento de cierre
APP_INCLUDE
está APP_INCLUDE
al trabajador que estás iniciando. Si está iniciando otro trabajador, use APP_INCLUDE
nuevamente. Puede utilizar un archivo diferente para cada trabajador.
También puede diseñar sus clases de trabajo para ejecutar más de un trabajo. Hay un tutorial explica cómo hacerlo. Abarca desde lo básico de un sistema de colas hasta cómo usarlo e implementarlo.
Si aún no es suficiente, eche un vistazo a la documentación de resque. php-resque API es exactamente el mismo. La única diferencia es que las clases de trabajo de Resque están escritas en Ruby, mientras que las de php-resque están en php.