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.
class Custom_DbForUpdate extends Zend_Queue_Adapter_Db
{
/**
* @see Code in tests/Zend/Queue/Custom/DbForUpdate.php
*
* Custom_DbForUpdate verwendet SELECT ... FOR UPDATE um seine Zeilen zu
* finden. Das ist besser um die gewünschten Zeilen zu erstellen als der
* existierende Code.
*
* Trotzdem haben nicht alle Datenbanken SELECT ... FOR UPDATE als Feature.
*
* Notiz: Das wurde später konvertiert um eine Option für
* Zend_Queue_Adapter_Db zu sein.
*
* Dieser Code ist trotzdem ein gutes Beispiel.
*/
}
$options = array(
'name' => 'queue1',
'driverOptions' => array(
'host' => '127.0.0.1',
'port' => '3306',
'username' => 'queue',
'password' => 'queue',
'dbname' => 'queue',
'type' => 'pdo_mysql'
)
);
$adapter = new Custom_DbForUpdate($options);
$queue = new Zend_Queue($adapter, $options);
Man kann den Adapter auch im Betrieb ändern.
$adapter = new MyCustom_Adapter($options); $queue = new Zend_Queue($options); $queue->setAdapter($adapter); echo "Adapter: ", get_class($queue->getAdapter()), "\n";
or
$options = array(
'name' => 'queue1',
'namespace' => 'Custom',
'driverOptions' => array(
'host' => '127.0.0.1',
'port' => '3306',
'username' => 'queue',
'password' => 'queue',
'dbname' => 'queue',
'type' => 'pdo_mysql'
)
);
$queue = new Zend_Queue('DbForUpdate', $config); // loads Custom_DbForUpdate
Zend_Queue akzeptiert auch eigene Nachrichten Klassen. Unsere
Variablen beginnen mit einem Unterstrich. Zum Beispiel:
class Zend_Queue_Message
{
protected $_data = array();
}
Man kann die bestehende Nachrichten Klasse erweitern. Siehe den Beispielcode in
tests/Zend/Queue/Custom/Message.php.
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.