PlatformJobQueueアダプタ
Zend Platform Job Queueは、Zend Platformの一部として提供されている、PHPのジョブを格納する特殊なサーバです。PlatformJobQueueアダプタは最新のZend Serverバージョン5.0ではなく、Zend PlatformのJob Queueとのメッセージのやりとりに対応したアダプタなので注意してください。
準備
Zend Platformがインストールされている必要があります。また、ジョブとして実行したいスクリプトを指定されたフォルダ(デフォルトでは「jobQueue」)に入れておく必要があります。
コンストラクタ
PlatformJobQueueアダプタを利用するためには、次の2つのオプションを指定する必要があります(どちらも必須)。
| 名前 | 意味 |
| daemonOptions.host | Job Queueのホスト名とポート番号、書式は'ホスト名:ポート番号' |
| daemonOptions.password | Job Queueにアクセスするためのパスワード |
例えばローカルホストで動作しているJob Queueにパスワード「codezine_password」でアクセスするには次のようにオプションを与えます。
//オプション
$options = array(
'daemonOptions' => array(
'host' => 'localhost:10085',
'password' => 'codezine_password',
),
);
//コンストラクタ
$queue = new Zend_Queue('PlatformJobQueue', $options);
こちらもジョブ管理専用のサーバを利用するためのアダプタなので、設定自体は簡単です。
メソッドの利用方法
Zend PlatformのJob Queueは通常のメッセージキュー管理サーバではなく、PHPのジョブを管理するためのサーバです。そのため、メソッドの機能も他のアダプタとは随分違います。PlatformJobQueueアダプタでのメソッドの機能をまとめると、次のようになります。
| メソッド名 | 引数 | 機能 |
| create、isExists、delete、getQueues | 利用できない、呼び出したら例外が発生 | |
| count | (なし) | 実行中のジョブの数 |
| send | (次に説明) | ジョブの追加、引数によって挙動が変化 |
| receive | $maxMessages | 実行中のジョブの一覧を$maxMessages個まで、Zend_Queue_Message_PlatformJobオブジェクトの配列として取得する |
| deleteMessage | $message | $messageで指定されたジョブの実行を中止する。$messageはZend_Queue_Message_PlatformJobオブジェクトで指定する |
一般のメッセージキューを管理するためのメソッド(「create」メソッド、「isExists」メソッド、「delete」メソッド、「getQueues」メソッド)は呼び出された場合は例外が発生します。また、「count」メソッドが返すのは「キュー上のメッセージの数」ではなく、「処理中(未処理)のジョブの数」となります。
ジョブをサーバに送るsendメソッドには、利用する方法が3種類あります。ジョブをスクリプト名で指定する方法、ジョブに関する情報を連想配列で与える方法、そしてジョブに関する情報が指定されているZendApi_Jobオブジェクトを渡す方法です。
直接実行したいスクリプト名を指定する方法では、スクリプト名を直接文字列として指定します。なお、この場合はスクリプトに引数を指定できません。
$queue->send('test_job.php');
ジョブへの引数や、ジョブへの細かい制御を行いたい場合には配列ないしZendApi_Jobオブジェクトを指定します。配列を利用する場合には次の要素を指定できます。
| 要素 | 説明 |
| script | ジョブとして登録するスクリプトの名前(必須) |
| priority | ジョブの優先順位 |
| name | ジョブの説明 |
| predecessor | 前提となるジョブのID、前提のジョブが終了するまでこのジョブは実行されない |
| preserved | Job Queueの履歴に、登録するジョブを残すかどうか、デフォルトでは「false」 |
| user_variables | ジョブへ渡す引数を連想配列の形で指定する |
| interval | ジョブが何秒おきに起動されるかを指定する、デフォルトは「0」で、一回のみ実行される |
| end_time | この時刻が指定されている場合には、この時刻以降にはジョブが起動されない |
| schedule_time | ジョブを起動すべき時刻をUNIXタイムスタンプで指定、デフォルトは「0」で、その場合にはジョブをすぐに起動する |
| application_id | ジョブのID、デフォルトでは「null」で、その場合には自動的にIDが割り振られる |
ZendApi_Jobオブジェクトで指定する場合にも、ZendApi_Jobクラスのコンストラクタに配列を与えることで、同じように各要素を指定できます。
なお、いずれの方法で呼び出された場合でも、sendメソッドはZend_Queue_Message_PlatformJobオブジェクトを返します。
