フレームワーク

Zend_Queueは、 待ち行列サービスの詳細を隠す代理です。 待ち行列サービスは、Zend_Queue_Adapter_<service>によって表現されます。 たとえば、Zend_Queue_Adapter_Dbは、 メッセージを格納・読み出しするためにデータベーステーブルを使う待ち行列です。

下記は、待ち行列システムのためにデータベーステーブルを利用する例です:

  1. $options = array(
  2.     'name'          => 'queue1',
  3.     'driverOptions' => array(
  4.         'host'      => '127.0.0.1',
  5.         'port'      => '3306',
  6.         'username'  => 'queue',
  7.         'password'  => 'queue',
  8.         'dbname'    => 'queue',
  9.         'type'      => 'pdo_mysql'
  10.     )
  11. );
  12.  
  13. // データベース待ち行列を作成します。
  14. // Zend_Queue はクラス名として Zend_Queue_Adapter_ の後に 'Db' を付加します。
  15. $queue = new Zend_Queue('Db', $options);

Zend_QueueコンストラクタはZend_Queue_Adapter_Dbを作成して、 構成設定値でアダプタを初期化します。

各々のアダプタに認められた構成設定値は、 アダプタの注意で示されます

Zend_Queueは クラスZend_Queue_Message_Iteratorを用いてメッセージを返します。 そして、それはSPL Iterator及びCountableの実装です。 Zend_Queue_Message_Iteratorは、 Zend_Queue_Messageオブジェクトの配列を含みます。

  1. $messages = $queue->receive(5);
  2. foreach ($messages as $i => $message) {
  3.     echo "$i) Message => ", $message->body, "\n";
  4. }

投げられるどんな例外も、クラスZend_Queue_Exceptionです。

導入

Zend_Queueは、 アダプタを表現する代理クラスです。

send()count($queue)、そして receive()メソッドは、 待ち行列と相互に作用するために、それぞれのアダプタによって使用されます。

createQueue()及び deleteQueue()メソッドは待ち行列を管理するために使われます。

アダプタの間の互換性

Zend_Queueによってサポートされる待ち行列サービスは、 同じ関数をサポートするとは限りません。 例えば、Zend_Queue_Adapter_Array及び Zend_Queue_Adapter_Dbは全ての関数をサポートしますが、 一方、Zend_Queue_Adapter_Activemqは 待ち行列の一覧や削除、そしてメッセージのカウントをサポートしません。

Zend_Queue::isSupported()または Zend_Queue::getCapabilities()を使って どんな関数がサポートされるか判定できます。

  • createQueue() - 待ち行列を作成

  • deleteQueue() - 待ち行列を削除

  • send() - メッセージを送信

    send()はアダプタ全てで利用可能なわけではありません; Zend_Queue_Adapter_Nullsend()をサポートしません。

  • receive() - メッセージを受信

    receive()はアダプタ全てで利用可能なわけではありません; Zend_Queue_Adapter_Nullreceive()をサポートしません。

  • deleteMessage() - メッセージを削除

  • count() - 待ち行列内のメッセージ数をカウント

  • isExists() - 待ち行列が存在するかチェック

receive()メソッドは、 待ち行列と相互に作用するために、それぞれのアダプタによって使用されます。

createQueue()及び deleteQueue()メソッドは待ち行列を管理するために使われます。

blog comments powered by Disqus