Adapter

Anpassen von Zend_Queue

Erstellung eigener Adapter

Zend_Queue akzeptiert jeden Adapter der Zend_Queue_Adapter_AdapterAbstract implementiert. Man kann eigene Adapter erstellen indem einer der existierenden Adapter, oder die abstrakte Klasse Zend_Queue_Adapter_AdapterAbstract erweitert wird. Es wird empfohlen Zend_Queue_Adapter_Array anzuschauen da dieser Adapter in seiner Konzeption der einfachste ist.

  1. class Custom_DbForUpdate extends Zend_Queue_Adapter_Db
  2. {
  3.     /**
  4.      * @see Code in tests/Zend/Queue/Custom/DbForUpdate.php
  5.      *
  6.      * Custom_DbForUpdate verwendet SELECT ... FOR UPDATE um seine Zeilen zu
  7.      * finden. Das ist besser um die gewünschten Zeilen zu erstellen als der
  8.      * existierende Code.
  9.      *
  10.      * Trotzdem haben nicht alle Datenbanken SELECT ... FOR UPDATE als Feature.
  11.      *
  12.      * Notiz: Das wurde später konvertiert um eine Option für
  13.      * Zend_Queue_Adapter_Db zu sein.
  14.      *
  15.      * Dieser Code ist trotzdem ein gutes Beispiel.
  16.      */
  17. }
  18.  
  19. $options = array(
  20.     'name'          => 'queue1',
  21.     'driverOptions' => array(
  22.         'host'      => '127.0.0.1',
  23.         'port'      => '3306',
  24.         'username'  => 'queue',
  25.         'password'  => 'queue',
  26.         'dbname'    => 'queue',
  27.         'type'      => 'pdo_mysql'
  28.     )
  29. );
  30.  
  31. $adapter = new Custom_DbForUpdate($options);
  32. $queue   = new Zend_Queue($adapter, $options);

Man kann den Adapter auch im Betrieb ändern.

  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); // loads Custom_DbForUpdate

Eine eigene Nachrichtenklasse erstellen

Zend_Queue akzeptiert auch eigene Nachrichten Klassen. Unsere Variablen beginnen mit einem Unterstrich. Zum Beispiel:

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

Man kann die bestehende Nachrichten Klasse erweitern. Siehe den Beispielcode in tests/Zend/Queue/Custom/Message.php.

Erstellen einer eigenen Nachrichten Iterator Klasse

Zend_Queue akzeptiert auch eine eigene Nachrichten Iterator Klasse. Diese Nachrichten Iterator Klasse wird verwendet um Nachrichten von Zend_Queue_Adapter_Abstract::recieve() zurckzugeben. Zend_Queue_Abstract::receive() sollte immer eine Controller Klasse zurückgeben so wie Zend_Queue_Message_Iterator selbst wenn nur eine Nachricht vorhanden ist.

Siehe den Beispiel Dateinamen in tests/Zend/Queue/Custom/Messages.php.

Erstellen einer eigenen Queue Klasse

Zend_Queue kann auch sehr einfach überladen werden.

Siehe den Beispiel Dateinamen in tests/Zend/Queue/Custom/Queue.php.


Adapter