Colas dinámicas y de modelo

Esta información ofrece una perspectiva de las colas dinámicas, las propiedades de las colas dinámicas temporales y permanentes, los usos de las colas dinámicas y algunas consideraciones que hay que tomar en cuenta cuando se utilizan colas dinámicas, y colas modelo.

Cuando un programa de aplicación emite una llamada MQOPEN para abrir una cola modelo, el gestor de colas crea dinámicamente una instancia de una cola local con los mismos atributos que la cola modelo. En función del valor del campo DefinitionType de la cola modelo, el gestor de colas crea una cola dinámica temporal o permanente (consulte Creación de colas dinámicas ).

Propiedades de las colas dinámicas temporales
Las colas dinámicas temporales tienen las propiedades siguientes:
  • [z/OS]No pueden ser colas compartidas, accesibles desde los gestores de colas de un grupo de compartición de colas.

    Tenga en cuenta que los grupos de compartición de colas solo están disponibles en IBM® MQ for z/OS®.

  • Sólo contienen mensajes persistentes
  • Son irrecuperables.
  • Se suprimen cuando se inicia el gestor de colas.
  • Se suprimen cuando la aplicación que ha emitido la llamada MQOPEN que creó la cola cierra la cola o termina.
    • Si hay mensajes confirmados en la cola, se suprimen.
    • Si hay alguna llamada no confirmada MQGET, MQPUT o MQPUT1 para la cola en este momento, la cola se marca como suprimida lógicamente, y sólo se suprimirá físicamente (después de que estas llamadas se hayan confirmado) como parte del proceso de cierre, o cuando la aplicación finalice.
    • Si la cola está en uso en este momento (por la aplicación que la crea o cualquier otra), la cola se marca como suprimida lógicamente, y sólo se suprimirá físicamente cuando se cierre la última aplicación que utiliza la cola.
    • Los intentos de acceder a una cola suprimida lógicamente (que no se para cerrarla) fallarán con el código de razón MQRC_Q_DELETED.
    • MQCO_NONE, MQCO_DELETE y MQCO_DELETE_PURGE se tratan todos como MQCO_NONE cuando se han especificado en una llamada QCLOSE para la llamada MQOPEN correspondiente que ha creado la cola.
Propiedades de las colas dinámicas permanentes
Las colas dinámicas permanentes tienen las propiedades siguientes:
  • Contienen mensajes persistentes o no persistentes.
  • Son recuperables en caso de anomalías del sistema.
  • Se suprimen cuando una aplicación (no necesariamente la que ha emitido la llamada MQOPEN que ha creado la cola) cierre satisfactoriamente la cola utilizando la opción MQCO_DELETE o MQCO_DELETE_PURGE.
    • Una petición de cierre con la opción MQCO_DELETE falla si todavía hay algún mensaje (confirmado o sin confirmar) en la cola. Una petición de cierre con la opción MQCO_DELETE_PURGE será satisfactoria aunque haya mensajes confirmados en la cola (los mensajes que están suprimiéndose como parte del cierre), pero no será satisfactoria si hay alguna llamada no confirmada MQGET, MQPUT o MQPUT1 pendiente para la cola.
    • Si la petición de supresión es satisfactoria, pero la cola está en uso (por la aplicación que la crea o cualquier otra), la cola se marca como suprimida lógicamente y sólo se suprimirá físicamente cuando se cierre la última aplicación que utiliza la cola.
  • No se suprimen si las cierra una aplicación que no está autorizada a suprimir la cola, a menos que la aplicación de cierre emitiera la llamada MQOPEN que creó la cola. Se llevan a cabo comprobaciones de autorización con respecto al identificador de usuario (o un identificador de usuario alternativo si se especificó MQOO_ALTERNATE_USER_AUTHORITY) que se ha utilizado para validar la llamada MQOPEN correspondiente.
  • Se pueden suprimir de la misma manera que una cola normal.
Usos de las colas dinámicas
Puede utilizar colas dinámicas para:
  • Aplicaciones que no requieren que se guarden colas después de que la aplicación haya finalizado.
  • Aplicaciones que requieren que las respuestas a los mensajes para ser procesados por otra aplicación. Estas aplicaciones pueden crear dinámicamente una cola de respuestas abriendo una cola modelo. Por ejemplo, una aplicación de cliente puede:
    1. Crear una cola dinámica.
    2. Suministrar el nombre en el campo ReplyToQ de la estructura de descriptor de mensaje del mensaje de solicitud.
    3. Colocar la petición en una cola que un servidor está procesando.

A continuación, el servidor puede colocar el mensaje de respuesta en la cola de respuestas. Finalmente, el cliente puede procesar la respuesta, y cerrar la cola de respuestas con la opción de supresión.

Consideraciones al utilizar colas dinámicas
Tenga en cuenta las cuestiones siguientes al utilizar colas dinámicas:
  • En un modelo cliente-servidor, cada cliente debe crear y utilizar su propia dinámica cola de respuestas. Si una cola dinámica de respuestas se comparte entre más de un cliente, la supresión de la cola de respuestas podría demorarse debido a que hay actividad no confirmada en la cola o porque otro cliente está utilizando la cola. Además, la cola puede marcarse como suprimida lógicamente e inaccesible para las peticiones posteriores de la API (distintas de MQCLOSE).
  • Si el entorno de aplicación requiere que se compartan colas dinámicas entre aplicaciones, asegúrese de que la cola sólo se cierra (con la opción de supresión) cuando toda la actividad que hay en ella se haya confirmado. Esta acción la debe realizar el último usuario. De este modo se asegura que la supresión de la cola no se retrasa, y se minimiza el período en el que la cola es inaccesible porque se ha marcado como suprimida lógicamente.

Colas modelo

Una cola modelo es una plantilla de definición de cola que se utiliza al crear una cola dinámica.

Puede crear una cola local dinámicamente desde un programa IBM MQ, nombrando la cola modelo que desea utilizar como plantilla para los atributos de cola. En ese momento puede cambiar algunos atributos de la nueva cola. Pero no puede cambiar DefinitionType. Si, por ejemplo, necesita una cola persistente, seleccione una cola de modelo con el tipo de definición establecido en permanente. Algunas aplicaciones conversacionales pueden utilizar colas dinámicas para albergar las respuestas a sus consultas porque probablemente no necesitan mantener estas colas después de que hayan procesado las respuestas.

Debe especificar el nombre de una cola modelo en el descriptor de objeto (MQOD) de la llamada MQOPEN. Utilizando los atributos de la cola modelo, el gestor de colas crea de forma automática y dinámica una cola local.

El usuario puede especificar un nombre (completo) para la cola dinámica o la raíz de un nombre (por ejemplo, ABC) y dejar que el gestor de colas le añada una parte exclusiva o bien dejar que el gestor de colas asigne automáticamente un nombre exclusivo completo. Si el gestor de colas asigna el nombre, lo coloca en la estructura MQOD.

No puede emitir una llamada MQPUT1 directamente a una cola modelo, pero puede emitir una llamada MQPUT1 a la cola dinámica que se ha creado abriendo una cola modelo.

MQSET y MQINQ no se pueden emitir contra una cola de modelo. La apertura de una cola de modelo con MQOO_INQUIRE o MQOO_SET, resulta en posteriores llamadas de MQINQ y MQSET realizadas contra la cola creada dinámicamente.

Los atributos de una cola modelo son un subconjunto de los de una cola local. Para obtener una descripción más completa, consulte Atributos para colas.