TigerZF
🌐Español

57.5. Personalizar Zend_Queue

57.5.1. Crear su propio adaptador

Zend_Queue aceptará cualquier adaptador que implemente Zend_Queue_Adapter_AdapterAbstract. Puede crear su propio adaptador extendiendo uno de los adaptadores existentes, o la clase abstracta Zend_Queue_Adapter_AdapterAbstract. Se sugiere revisar Zend_Queue_Adapter_Array, ya que este adaptador es el más fácil de conceptualizar.

class Custom_DbForUpdate extends Zend_Queue_Adapter_Db
{
    /**
     * @see code in tests/Zend/Queue/Custom/DbForUpdate.php
     *
     * Custom_DbForUpdate uses the SELECT ... FOR UPDATE to find it's rows.
     * this is more likely to produce the wanted rows than the existing code.
     *
     * However, not all databases have SELECT ... FOR UPDATE as a feature.
     *
     * Note: this was later converted to be an option for Zend_Queue_Adapter_Db
     *
     * This code still serves as a good example.
     */
}

$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);

También puede cambiar el adaptador sobre la marcha.

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

o

$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

57.5.2. Crear su propia clase de mensaje

Zend_Queue también aceptará su propia clase de mensaje. Nuestras variables empiezan con un guion bajo. Por ejemplo:

class Zend_Queue_Message
{
    protected $_data = array();
}

Puede extender la clase de mensajería existente. Vea el código de ejemplo en tests/Zend/Queue/Custom/Message.php.

57.5.3. Crear su propia clase de iterador de mensajes

Zend_Queue también aceptará su propia clase de iterador de mensajes. La clase de iterador de mensajes se usa para devolver mensajes desde Zend_Queue_Adapter_Abstract::recieve(). Zend_Queue_Abstract::receive() siempre debería devolver una clase contenedora como Zend_Queue_Message_Iterator, incluso si solo hay un mensaje.

Vea el nombre de archivo de ejemplo en tests/Zend/Queue/Custom/Messages.php.

57.5.4. Crear su propia clase de cola

Zend_Queue también puede sobrecargarse fácilmente.

Vea el nombre de archivo de ejemplo en tests/Zend/Queue/Custom/Queue.php.