ジョブクラスは好きな場所に配置できます。アプリケーションの構造によって異なります。
ジョブクラスの作成方法
たとえばVideoConversion
、ffmpeg 変換に使用される class を考えてみましょう。
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')
でジョブをキューに入れるときの 3 番目の引数であるジョブ引数 ( ) は、を介してメソッド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 構成で、すべてのジョブ クラスを含むディレクトリをインクルード パスに追加します。あなたの労働者はそれらを自動的に見つけます。
この方法の主な問題は、すべてのジョブ クラスが同じフォルダーにある必要があり、すべてのジョブ クラスがどこからでも利用できることです。
各ワーカーにジョブ クラスの場所を伝える
ワーカーを開始するときは、APP_INCLUDE
引数を使用してジョブ クラス 'autoloader' を指定します。
APP_INCLUDE=/path/to/autoloader.php QUEUE=convert php resque.php
上記のコマンドは、という名前のキューをポーリングして、新しいワーカーを開始しますconvert
。また、ファイル/path/to/autoloader.phpをワーカーに渡します。(ワーカーの開始方法については、こちらを参照してください)
技術的には、ワーカーはそのファイルを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
もう一度使用してください。ワーカーごとに異なるファイルを使用できます。
複数のジョブを実行するようにジョブ クラスを設計することもできます。その方法を説明するチュートリアルがあります。キューシステムの基本から使用方法、実装方法までをカバーしています。
それでも不十分な場合は、resque のドキュメントを参照してください。php-resque API はまったく同じです。唯一の違いは、Resque ジョブ クラスが Ruby で記述されているのに対し、php-resque のジョブ クラスは php で記述されていることです。