最後に、実装されている機能の一覧を返すgetCapabiliteisメソッドです。
public function getCapabilities()
{
return array(
'create' => false,
'delete' => false,
'send' => true,
'receive' => true,
'deleteMessage' => false,
'getQueues' => true,
'count' => false,
'isExists' => false,
);
}
このように、提供されている機能については「true」となっているような配列を返すようにします。
このFileアダプタを利用した例を示します。
require 'Zend/Queue.php';
require_once 'File.php';
/* メッセージキューの作成 */
/* オプションの指定 */
$options = array('name' => 'codezine_queue',
'driverOptions' => array(
'file' => 'codezine_queue'));//(1)
/* Arrayアダプタを利用したキューの作成 */
$queue = new Zend_Queue('File', $options);
receiveメソッドの返り値
Zend_Queueのreceiveメソッドは、前回述べたとおりSPLイテレータを実装したクラスで返すことになっています。ここに関してこれ以上の制限はないのですが、標準のアダプタは全て、
- 各メッセージはZend_Queue_Messageオブジェクト
- receiveメソッドの返り値はZend_Queue_Message_Iteratorオブジェクト
として返しています。
Zend_Queue_Messageクラスはメッセージを格納するためのクラスです。コンストラクタは配列を受け取り、その配列の中の「queue」要素と「data」要素によってオブジェクトの初期化を行います。
$options = array();
//(1)queue要素にはキューを設定
$options['queue'] = $this;
//(2)data要素には実際のデータを
$data = array('body' => 'message 1');
$options['data'] = $data;
//(3)コンストラクタ
$message = new Zend_Queue_Message($options);
//(4)データへのアクセス、出力
echo $message->data;
▼
message 1
(1)と(2)で初期化のための配列の要素を設定し、(3)でコンストラクタを呼び出しています。(2)で設定された配列のdata要素は、(4)のように、作成されたオブジェクトのフィールド要素としてアクセスできます。
Zend_Queue_Message_IteratorクラスはZend_Queue_Messageを格納するためのクラスで、同様に「queue」要素「data」要素を持つ配列で初期化します。
$options = array();
//(1)queue にはキューを設定
$options['queue'] = $this;
//(2)queue はメッセージの配列
$data = array($message1, $message2, $message3);
$options['data'] = $data;
//(3)queue はメッセージの配列
$messages = new Zend_Queue_Message_Iterator($options);
//(4)SPLイタレータとしてアクセス
foreach ($messages as $i => $message) {
/* メッセージの中身の確認 */
echo $message->body, "\n";
}
先程と同様に(1)~(3)でデータの設定とオブジェクトの作成をしています。(4)のように、作成されたオブジェクトはSPLイタレータとしてアクセスできます。
おわりに
今回はZend_Queueコンポーネントの2つのアダプタの利用法について見た後、アダプタを自作する方法やStompプロトコルを直接送受信する方法について見てみました。軽量なMemcacheQから本格的なウェブアプリプラットホームのZend Platformなど、さまざまな環境とZend_Queueを組み合わせられることが分かったと思います。
次回はユニットテストの記述を支援する、Zend_Testコンポーネントについて取り上げたいと思います。
