设置和使用php resque的正确方法是什么?
我正在尝试使用在我的服务器上排队和执行ffmpeg转换。我大致了解它应该如何工作,但我在细节方面遇到了一些问题,并且找不到任何教程。具体地说,我不知道我应该把我的职业课程放在哪里,以及如何给我的员工上课,如何开始我的员工。“只读我的书”上说,“让你的申请进行还包括通过自动加载器或包括它们的方式告诉员工你的职业类别。”设置和使用php resque的正确方法是什么?,php,resque,Php,Resque,我正在尝试使用在我的服务器上排队和执行ffmpeg转换。我大致了解它应该如何工作,但我在细节方面遇到了一些问题,并且找不到任何教程。具体地说,我不知道我应该把我的职业课程放在哪里,以及如何给我的员工上课,如何开始我的员工。“只读我的书”上说,“让你的申请进行还包括通过自动加载器或包括它们的方式告诉员工你的职业类别。” 希望有人能概述使用php resque的总体结构。您可以将作业类放在您想要的地方。这将取决于您的应用程序结构 如何创建作业类 例如,假设类VideoConversion,用于ffm
希望有人能概述使用php resque的总体结构。您可以将作业类放在您想要的地方。这将取决于您的应用程序结构 如何创建作业类 例如,假设类
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类,并执行perform()
方法
作业参数(array('origine-video.avi','destination video.avi')
)是使用Resque::enqueue
对作业进行排队时的第三个参数,可通过$this->args>在perform()
方法中使用
# VideoConversion.php
class VideoConversion
{
public function perform() {
// $this->args == array('origine-video.avi', 'destination-video.avi');
// Convert the video
}
找到你的职业课程
VideoConversion
类可以放在任何地方,但是你必须告诉你的员工在哪里可以找到它。
有多种方法可以做到这一点
将作业类放在include_路径中
在.htaccess或apache配置中,将包含所有作业类的目录添加到include路径。您的工作人员将自动找到它们
此方法的主要问题是所有作业类必须位于同一文件夹中,并且所有作业类都可以在任何地方使用
告诉每个员工在哪里可以找到你的职业分类
启动worker时,使用APP\u INCLUDE
参数指向作业类“autoloader”
APP_INCLUDE=/path/to/autoloader.php QUEUE=convert php resque.php
上面的命令将启动一个新的工作进程,轮询名为convert
的队列。
我们还将文件/path/to/autoloader.php传递给worker。()
从技术上讲,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('path/to/job');
这样,您的作业就位于仅针对该员工的include\u路径中
结束思想
APP\u INCLUDE
绑定到您正在启动的工作人员。如果您正在启动另一个工作人员,请再次使用APP\u INCLUDE
。您可以为每个工作人员使用不同的文件
您还可以设计作业类以执行多个作业。有一个解释如何做到这一点。它涵盖了队列系统的基本知识,以及如何使用和实现它
如果仍然不够,请查看resque文档。php resque API完全相同。唯一的区别是Resque作业类是用Ruby编写的,而php Resque的作业类是用php编写的。您好,请查看下面关于如何将Resque与phalcon一起使用的教程。
嗨,Kamisama,我浏览了你关于背景工作的博客文章,它们非常棒。我在Windows7上遵循相同的步骤。作业已正确排队。我可以从Redis控制台看到它。但当我运行Resque命令时,会弹出作业(Redis控制台中的计数会下降),但作业是空的。我通过将fwrite放入实际的PHP Resque库来检查这一点。php类的pop方法正在获取项($item),但它始终为空。你知道会出什么问题吗?这与Windows操作系统有关吗?谢谢。所以Redis pop命令总是返回null?检查cli模式下的php是否正确配置为使用redis。@Kamisama thx以获取有用的教程系列。如何告诉resque worker在给定队列中一次只处理一个作业?忘记提到我的应用程序我在排队时使用了symfony bundle bccresquebundle,它不应该说resque::enqueue('convert','VideoConversion',array('origine-video.avi','destination video.avi')代码>而不是默认值?