设置和使用php-resque的正确方法是什么?

时间:2012-08-05 06:25:16

标签: php resque

我正在尝试使用php-resque在我的服务器上排队并执行ffmpeg转换。我广泛理解它应该如何工作,但我在细节方面有些麻烦,找不到任何教程。具体来说,我不明白我应该在哪里上课,以及如何将课程交给我的工人并开始我的工作。读我只说“让你的应用程序正在进行中还包括通过自动加载器或包括它们告诉工人你的工作类。”

希望有人可以概述使用php-resque的整体结构。

2 个答案:

答案 0 :(得分:36)

您可以将工作班级放在所需的位置。这取决于您的应用程序结构。

如何创建工作类

例如,我们假设用于ffmpeg转换的类VideoConversion

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配置中,将包含所有作业类的目录添加到包含路径。您的员工会自动找到他们。

此方法的主要问题是所有作业类必须位于同一文件夹中,并且所有作业类都可在任何位置使用。

告诉每个工人在哪里找到你的工作类

启动worker时,使用APP_INCLUDE参数指向作业类的“自动加载器”。

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

上面的命令将启动一个新的worker,轮询名为convert的队列。 我们还将文件 /path/to/autoloader.php 传递给worker。 (see here to learn to start a worker

从技术上讲,工作人员会将该文件包含include '/path/to/autoloader.php';

然后,您可以告诉工人如何找到您的工作类:

使用基本的

在'/path/to/autoloader.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。您可以为每个工作人员使用不同的文件。

您还可以设计作业类以执行多个作业。有tutorial解释如何做到这一点。它涵盖了从队列系统的基础到如何使用和实现它。

如果仍然不够,请查看resque文档。 php-resque API完全相同。唯一的区别是Resque作业类是用Ruby编写的,而php-resque是用PHP编写的。

答案 1 :(得分:1)

您好请查看以下教程,了解如何使用phalcon resque。 http://www.mehuldoshi.in/background-jobs-phalcon-resque/