アダプタ

Zend_Queueのカスタマイズ

独自のアダプタ作成

Zend_Queueは、 Zend_Queue_Adapter_AdapterAbstractを実装するどんなアダプタも扱います。 既存のアダプタ、 または抽象クラスZend_Queue_Adapter_AdapterAbstractのうちの1つを拡張することにより、 独自のアダプタを作成できます。 このアダプタとしてZend_Queue_Adapter_Arrayを検討することが、 最も簡単に概念化できると提案します。

  1. class Custom_DbForUpdate extends Zend_Queue_Adapter_Db
  2. {
  3.     /**
  4.      * @see tests/Zend/Queue/Custom/DbForUpdate.php のコード
  5.      *
  6.      * Custom_DbForUpdate はその行を見つけるために、SELECT ... FOR UPDATE を使います。
  7.      * 既存のコードよりも求められる列をもたらす可能性がよりあります。
  8.      *
  9.      * しかしながら、データベース全てに SELECT ... FOR UPDATE フィーチャがあるとは限りません。
  10.      *
  11.      * 注意: これは後でZend_Queue_Adapter_Dbのオプションに変換されました。
  12.      *
  13.      * このコードは良い例をまだ提供します。
  14.      */
  15. }
  16.  
  17. $options = array(
  18.     'name'          => 'queue1',
  19.     'driverOptions' => array(
  20.         'host'      => '127.0.0.1',
  21.         'port'      => '3306',
  22.         'username'  => 'queue',
  23.         'password'  => 'queue',
  24.         'dbname'    => 'queue',
  25.         'type'      => 'pdo_mysql'
  26.     )
  27. );
  28.  
  29. $adapter = new Custom_DbForUpdate($options);
  30. $queue = new Zend_Queue($adapter, $options);

同様に即座にアダプタを変えることもできます。

  1. $adapter = new MyCustom_Adapter($options);
  2. $queue   = new Zend_Queue($options);
  3. $queue->setAdapter($adapter);
  4. echo "Adapter: ", get_class($queue->getAdapter()), "\n";

or

  1. $options = array(
  2.     'name'           => 'queue1',
  3.     'namespace'      => 'Custom',
  4.     'driverOptions'  => array(
  5.         'host'       => '127.0.0.1',
  6.         'port'       => '3306',
  7.         'username'   => 'queue',
  8.         'password'   => 'queue',
  9.         'dbname'     => 'queue',
  10.         'type'       => 'pdo_mysql'
  11.     )
  12. );
  13. $queue = new Zend_Queue('DbForUpdate', $config); // Custom_DbForUpdate をロード

独自のメッセージクラスを作成

Zend_Queueは、独自のメッセージクラスも扱います。 変数はアンダーラインで始めます。 例えば:

  1. class Zend_Queue_Message
  2. {
  3.     protected $_data = array();
  4. }

既存のメッセージクラスを拡張できます。 tests/Zend/Queue/Custom/Message.phpでコード例をご覧下さい。

独自のメッセージ・イテレータクラスを作成

Zend_Queueは、独自のメッセージ・イテレータ・クラスも扱います。 メッセージ・イテレータ・クラスは、 Zend_Queue_Adapter_Abstract::recieve()からメッセージを返すために使われます。 たとえメッセージが1つだけだとしても、 Zend_Queue_Abstract::receive()は、 Zend_Queue_Message_Iteratorのようなコンテナ・クラスを常に返さなければなりません。

tests/Zend/Queue/Custom/Messages.phpでファイル名の例をご覧ください。

独自の待ち行列クラスを作成

Zend_Queueは上書きすることも簡単にできます。

tests/Zend/Queue/Custom/Queue.phpでファイル名の例をご覧ください。


アダプタ