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.

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

Eine eigene Nachrichtenklasse erstellen

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.

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.