TigerZF
🌐Español

57.4. Adaptadores

Zend_Queue soporta todas las colas que implementen la interfaz Zend_Queue_Adapter_AdapterInterface. Se soportan los siguientes servicios de colas de mensajes:

  • Apache ActiveMQ.

  • Una cola basada en base de datos mediante Zend_Db.

  • Una cola MemcacheQ gestionada mediante Memcache.

  • La cola de trabajos de Zend Platform.

  • Un array local. Útil para pruebas unitarias.

[Note] Limitaciones

No se soporta el manejo de transacciones de mensajes.

57.4.1. Adaptadores específicos - Ajustes de configuración

Si se indica un ajuste predeterminado, entonces el parámetro es opcional. Si no se especifica un ajuste predeterminado, entonces el parámetro es obligatorio.

57.4.1.1. Apache ActiveMQ - Zend_Queue_Adapter_Activemq

Las opciones listadas aquí son requisitos conocidos. No todos los servidores de mensajería requieren nombre de usuario o contraseña.

  • $options['name'] = '/temp/queue1';

    Este es el nombre de la cola que se desea empezar a usar. (Obligatorio)

  • $options['driverOptions']['host'] = 'host.domain.tld';

    $options['driverOptions']['host'] = '127.0.0.1';

    Puede establecer host con una dirección IP o un nombre de host.

    El ajuste predeterminado para host es '127.0.0.1'.

  • $options['driverOptions']['port'] = 61613;

    El ajuste predeterminado para port es 61613.

  • $options['driverOptions']['username'] = 'username';

    Opcional para algunos servidores de mensajería. Lea el manual de su servidor de mensajería.

  • $options['driverOptions']['password'] = 'password';

    Opcional para algunos servidores de mensajería. Lea el manual de su servidor de mensajería.

  • $options['driverOptions']['timeout_sec'] = 2;

    $options['driverOptions']['timeout_usec'] = 0;

    Esta es la cantidad de tiempo que Zend_Queue_Adapter_Activemq esperará por actividad de lectura en un socket antes de devolver ningún mensaje.

57.4.1.2. Db - Zend_Queue_Adapter_Db

Las opciones del controlador se comprueban para verificar algunas opciones obligatorias como type, host, username, password, y dbname. Puede pasar parámetros adicionales para Zend_DB::factory() como parámetros en $options['driverOptions']. Un ejemplo de una opción adicional no listada aquí, pero que podría pasarse, sería port.

$options = array(
    'driverOptions' => array(
        'host'      => 'db1.domain.tld',
        'username'  => 'my_username',
        'password'  => 'my_password',
        'dbname'    => 'messaging',
        'type'      => 'pdo_mysql',
        'port'      => 3306, // optional parameter.
    ),
    'options' => array(
        // use Zend_Db_Select for update, not all databases can support this
        // feature.
        Zend_Db_Select::FOR_UPDATE => true
    )
);

// Create a database queue.
$queue = new Zend_Queue('Db', $options);
  • $options['name'] = 'queue1';

    Este es el nombre de la cola que se desea empezar a usar. (Obligatorio)

  • $options['driverOptions']['type'] = 'Pdo';

    type es el adaptador que desea que Zend_Db::factory() use. Este es el primer parámetro de la llamada al método de clase Zend_Db::factory().

  • $options['driverOptions']['host'] = 'host.domain.tld';

    $options['driverOptions']['host'] = '127.0.0.1';

    Puede establecer host con una dirección IP o un nombre de host.

    El ajuste predeterminado para host es '127.0.0.1'.

  • $options['driverOptions']['username'] = 'username';

  • $options['driverOptions']['password'] = 'password';

  • $options['driverOptions']['dbname'] = 'dbname';

    El nombre de la base de datos para la cual ha creado las tablas requeridas. Vea la sección de notas a continuación.

57.4.1.3. MemcacheQ - Zend_Queue_Adapter_Memcacheq

  • $options['name'] = 'queue1';

    Este es el nombre de la cola que se desea empezar a usar. (Obligatorio)

  • $options['driverOptions']['host'] = 'host.domain.tld';

    $options['driverOptions']['host'] = '127.0.0.1;'

    Puede establecer host con una dirección IP o un nombre de host.

    El ajuste predeterminado para host es '127.0.0.1'.

  • $options['driverOptions']['port'] = 22201;

    El ajuste predeterminado para port es 22201.

57.4.1.4. Zend Platform Job Queue - Zend_Queue_Adapter_PlatformJobQueue

  • $options['daemonOptions']['host'] = '127.0.0.1:10003';

    El nombre de host y el puerto correspondientes al daemon de Zend Platform Job Queue que va a usar. (Obligatorio)

  • $options['daemonOptions']['password'] = '1234';

    La contraseña requerida para acceder al daemon de Zend Platform Job Queue. (Obligatorio)

57.4.1.5. Array - Zend_Queue_Adapter_Array

  • $options['name'] = 'queue1';

    Este es el nombre de la cola que se desea empezar a usar. (Obligatorio)

57.4.2. Notas para adaptadores específicos

Los siguientes adaptadores tienen notas:

57.4.2.1. Apache ActiveMQ

La duración de visibilidad para Zend_Queue_Adapter_Activemq no está disponible.

Aunque el ActiveMQ de Apache soporta múltiples suscripciones, Zend_Queue no lo hace. Debe crear un nuevo objeto Zend_Queue para cada suscripción individual.

Los nombres de cola/tema de ActiveMQ deben comenzar con uno de los siguientes:

  • /queue/

  • /topic/

  • /temp-queue/

  • /temp-topic/

Por ejemplo: /queue/testing

No se soportan las siguientes funciones:

  • create() - crear cola. Llamar a esta función lanzará una excepción.

  • delete() - eliminar cola. Llamar a esta función lanzará una excepción.

  • getQueues() - listar colas. Llamar a esta función lanzará una excepción.

57.4.2.2. Zend_Db

La sentencia SQL de base de datos CREATE TABLE ( ... ) se puede encontrar en Zend/Queue/Adapter/Db/mysql.sql.

57.4.2.3. MemcacheQ

Memcache se puede descargar desde http://www.danga.com/memcached/.

MemcacheQ se puede descargar desde http://memcachedb.org/memcacheq/.

  • deleteMessage() - Los mensajes se eliminan al recibirse de la cola. Llamar a esta función no tendría efecto. Llamar a esta función lanzará un error.

  • count() o count($adapter) - MemcacheQ no soporta un método para contar el número de elementos en una cola. Llamar a esta función lanzará un error.

57.4.2.4. Zend Platform Job Queue

Job Queue es una característica de la oferta de soluciones empresariales de Zend Platform. No es una cola de mensajes tradicional, sino que permite poner en cola un script para su ejecución, junto con los parámetros que desea pasarle. Puede obtener más información sobre Job Queue en el sitio web de zend.com.

A continuación se muestra una lista de métodos en los que el comportamiento de este adaptador diverge de las ofertas estándar:

  • create() - Zend Platform no tiene el concepto de colas discretas; en su lugar, permite a los administradores proporcionar scripts para procesar trabajos. Dado que agregar nuevos scripts está restringido a la interfaz de administración, este método simplemente lanza una excepción indicando que la acción está prohibida.

  • isExists() - Al igual que create(), dado que Job Queue no tiene una noción de colas con nombre, este método lanza una excepción al invocarse.

  • delete() - similar a create(), la eliminación de scripts de JQ no es posible excepto a través de la interfaz de administración; este método lanza una excepción.

  • getQueues() - Zend Platform no permite la introspección de los scripts de manejo de trabajos adjuntos a través de la API. Este método lanza una excepción.

  • count() - devuelve el número total de trabajos actualmente activos en la Job Queue.

  • send() - este método es quizás el que más diverge de otros adaptadores. El argumento $message puede ser uno de tres tipos posibles, y operará de forma diferente según el valor pasado:

    • string - el nombre de un script registrado con Job Queue para invocar. Si se pasa de esta forma, no se proporcionan argumentos al script.

    • array - un array de valores con los que configurar un objeto ZendApi_Job. Estos pueden incluir lo siguiente:

      • script - el nombre del script de Job Queue a invocar. (Obligatorio)

      • priority - la prioridad del trabajo a usar al registrarse con la cola.

      • name - una cadena corta que describe el trabajo.

      • predecessor - el ID de un trabajo del que este depende, y que debe ejecutarse antes de que este pueda comenzar.

      • preserved - si se debe conservar o no el trabajo dentro del historial de Job Queue. Por defecto, desactivado; pase un valor TRUE para conservarlo.

      • user_variables - un array asociativo de todas las variables que desea tener en el ámbito durante la ejecución del trabajo (similar a los argumentos con nombre).

      • interval - con qué frecuencia, en segundos, debe ejecutarse el trabajo. Por defecto, se establece en 0, lo que indica que debe ejecutarse una sola vez.

      • end_time - una hora de expiración, después de la cual el trabajo no debe ejecutarse. Si el trabajo se configuró para ejecutarse solo una vez, y end_time ya pasó, entonces el trabajo no se ejecutará. Si el trabajo se configuró para ejecutarse en un intervalo, no se ejecutará de nuevo una vez que end_time haya pasado.

      • schedule_time - una marca de tiempo UNIX que indica cuándo ejecutar el trabajo; por defecto, 0, lo que indica que el trabajo debe ejecutarse lo antes posible.

      • application_id - el identificador de la aplicación del trabajo. Por defecto, este es NULL, lo que indica que se asignará uno automáticamente por la cola, si a la cola se le asignó un ID de aplicación.

      Como se indicó, solo el argumento script es obligatorio; todos los demás simplemente están disponibles para permitir pasar detalles más precisos sobre cómo y cuándo ejecutar el trabajo.

    • ZendApi_Job - finalmente, puede simplemente pasar una instancia de ZendApi_Job, y se pasará directamente a la Job Queue de Platform.

    En todos los casos, send() devuelve un objeto Zend_Queue_Message_PlatformJob, que proporciona acceso al objeto ZendApi_Job usado para comunicarse con Job Queue.

  • receive() - recupera una lista de trabajos activos de Job Queue. Cada trabajo en el conjunto devuelto será una instancia de Zend_Queue_Message_PlatformJob.

  • deleteMessage() - dado que este adaptador solo funciona con Job Queue, este método espera que el $message proporcionado sea una instancia de Zend_Queue_Message_PlatformJob, y lanzará una excepción en caso contrario.

57.4.2.5. Array (local)

La cola Array es un array() de PHP en memoria local. Zend_Queue_Adapter_Array es buena para pruebas unitarias.