Mensaje de anulación de registro de suscriptor

El mensaje de mandato de anulación de registro de suscriptor se envía a un intermediario desde un suscriptor o se envía a otra aplicación en nombre de un suscriptor para indicar que ya no desea recibir mensajes que coincidan con los parámetros indicados.

Este mensaje se envía a SYSTEM.BROKER.CONTROL.QUEUE, la cola de control del intermediario. El usuario ha de tener la autorización necesaria para colocar un mensaje en esta cola.

Consulte el apartado Valores del MQMD en mensajes de mandato para el intermediario para obtener detalles de los parámetros del descriptor de mensaje (MQMD) necesarios cuando se envía un mensaje de mandato al intermediario.

Se puede anular el registro de una suscripción individual especificando los valores de tema, punto de suscripción y filtro correspondientes de la suscripción original. Si alguno de los valores no se especificó (es decir, adoptaron los valores por omisión) en la suscripción original, deberían omitirse cuando se anule el registro de la suscripción.

Se puede anular el registro de todas las suscripciones de un suscriptor, o un grupo de suscriptores, utilizando la opción DeregAll. Por ejemplo, si se especifica DeregAll junto con un punto de suscripción (pero sin ningún tema ni filtro), se anula el registro de todas las suscripciones para el suscriptor en el punto de suscripción especificado, independientemente del tema o filtro. Se permite cualquier combinación de tema, filtro y punto de suscripción; si se especifican los tres, sólo puede coincidir una suscripción y se hace caso omiso de la opción DeregAll.

El mensaje ha de enviarlo el suscriptor que registró la suscripción. Esto se confirma comprobando el ID de usuario del suscriptor.

Un administrador del sistema también puede anular el registro de suscripciones. No obstante, las suscripciones registradas con una cola dinámica temporal están asociadas a la cola, no únicamente al nombre de la cola. Si la cola se suprime, ya sea explícitamente o al desconectarse la aplicación del gestor de colas, ya no es posible utilizar el mandato de anulación de registro de suscriptor para anular el registro de las suscripciones de esa cola. Se puede anular el registro de las suscripciones utilizando el entorno de trabajo, y el intermediario las eliminará automáticamente la próxima vez que empareje una publicación con la suscripción, o la próxima vez que se reinicie el intermediario. En circunstancias normales, las aplicaciones deberían anular el registro de sus suscripciones antes de suprimir la cola o de desconectarse del gestor de colas.

Si un suscriptor envía un mensaje para anular el registro de una suscripción y recibe un mensaje de respuesta indicando que esta operación se ha realizado satisfactoriamente, es posible que todavía lleguen algunas publicaciones a la cola de suscriptores si el intermediario las estaba procesando al mismo tiempo que se estaba anulando el registro de la suscripción. Si los mensajes no se eliminan de la cola, puede producirse una acumulación de mensajes no procesados en la cola de suscriptores. Si la aplicación ejecuta un bucle que incluye una llamada MQGET con el CorrelID adecuado después de una suspensión momentánea, los mensajes se borrarán de la cola. Si está utilizando el protocolo de dispositivos (Device Protocol) de SCADA, hay una opción para iniciar y finalizar el borrado. Esto significa que los mensajes se borrarán del cliente.

Del mismo modo, si el suscriptor utiliza una cola dinámica permanente, y anula el registro y cierra la cola con la opción MQCO_DELETE_PURGE en una llamada MQCLOSE, la cola podría no estar vacía. Si algunas de las publicaciones del intermediario no se han confirmado aún cuando se suprime la cola, la llamada MQCLOSE emite un código de retorno MQRC_Q_NOT_EMPTY. La aplicación puede evitar este problema dejando en suspensión la llamada MQCLOSE y volviéndola a emitir de tanto en tanto.

Propiedades

<Command> (MQPSC_COMMAND)
El valor es DeregSub (MQPSC_DEREGISTER_SUBSCRIBER).

Esta propiedad ha de especificarse.

<Topic> (MQPSC_TOPIC)
El valor es una serie de caracteres que contiene el tema para el que va a anularse el registro.

Esta propiedad puede, opcionalmente, repetirse si se va a anular el registro de varios temas. Puede omitirse si se especifica DeregAll en <RegOpt>.

Los temas especificados pueden ser un subconjunto de los que están registrados si el suscriptor desea retener suscripciones para otros temas. Se permiten caracteres comodín, pero una serie de caracteres de tema que contenga caracteres comodín debe coincidir exactamente con la serie de caracteres correspondiente que se especificó en el mensaje de mandato de registro de suscriptor.

<SubPoint> (MQPSC_SUBSCRIPTION_POINT)
El valor es una serie de caracteres que especifica el punto de suscripción del cual ha de separarse la suscripción.
Esta propiedad no debe repetirse. Puede omitirse si se especifica <Topic> o si se especifica DeregAll en <RegOpt>. Si omite esta propiedad, se producirá lo siguiente:
  • Si no especifica DeregAll, se anula el registro de las suscripciones que coincidan con la propiedad <Topic> (y con la propiedad <Filter>, si está presente) del punto de suscripción por omisión.
  • Si especifica DeregAll, se anula el registro de todas las suscripciones (que coincidan con las propiedades <Topic> y <Filter>, si están presentes) de todos los puntos de suscripción.

Tenga en cuenta que no se puede especificar explícitamente el punto de suscripción por omisión. Por lo tanto, no hay forma de anular el registro de todas las suscripciones únicamente de este punto de suscripción; debe especificar los temas.

<SubIdentity> (MQPSC_SUBSCRIPTION_IDENTITY)
Esta es una serie de caracteres de longitud variable, con una longitud máxima de 64 caracteres. Se utiliza para representar una aplicación que tenga interés en una suscripción. El intermediario mantiene un conjunto de identidades de suscriptores para cada suscripción. Cada suscripción puede permitir que su identidad se establezca para contener una sola identidad o un número ilimitado de identidades.

Si la subidentidad (SubIdentity) se encuentra en el grupo de identidades de la suscripción, se eliminará del conjunto. Si el conjunto de identidades queda vacío como resultado de esta operación, la suscripción se eliminará del intermediario, a menos que se especifique LeaveOnly como valor de la propiedad RegOpt. Si el conjunto de identidades sigue conteniendo otras identidades, la suscripción no se eliminará del intermediario y el flujo de publicaciones no se interrumpirá.

Si se especifica SubIdentity (subidentidad), pero dicha SubIdentity no está en el conjunto de identidades de la suscripción, el mandato de anulación de registro de suscriptor no se ejecutará correctamente y devolverá el código de retorno MQRCCF_SUB_IDENTITY_ERROR.

<Filter> (MQPSC_FILTER)
El valor es una serie de caracteres que especifica el filtro para el que va a anularse el registro. Debe coincidir exactamente, incluidas mayúsculas y minúsculas y espacios en blanco, con un filtro de suscripción que se haya registrado anteriormente.

Esta propiedad puede, opcionalmente, repetirse si se va a anular el registro de más de un filtro. Puede omitirse si se especifica <Topic> o si se especifica DeregAll en <RegOpt>.

Los filtros especificados pueden ser un subconjunto de los registrados si el suscriptor quiere retener suscripciones para otros filtros.

<RegOpt> (MQPSC_REGISTRATION_OPTION)
La propiedad de opciones de registro puede tener uno de los siguientes valores:
DeregAll  
(MQPSC_DEREGISTER_ALL)

Se anulará el registro de todas las suscripciones coincidentes registradas para este suscriptor.

Si especifica DeregAll:
  • <Topic>, <SubPoint> y <Filter> pueden omitirse.
  • <Topic> y <Filter> pueden repetirse si es necesario.
  • <SubPoint> no debe repetirse.
Si no especifica DeregAll:
  • <Topic> ha de especificarse y puede repetirse si es necesario.
  • <SubPoint> y <Filter> pueden omitirse.
  • <SubPoint> no debe repetirse.
  • <Filter> puede repetirse si es necesario.
CorrelAsId  
(MQPSC_CORREL_ID_AS_IDENTITY)

El CorrelId del descriptor de mensaje (MQMD), que no puede ser cero, se utiliza para identificar el suscriptor. Ha de coincidir con el CorrelId utilizado en la suscripción original.

FullResp  
()

Cuando se especifica FullResp, en el mensaje de respuesta se devuelven todos los atributos de la suscripción, siempre y cuando el mandato se ejecute correctamente.

Cuando se ha especificado FullResp, DeregAll no se permite en el mandato de anulación de registro de suscriptor. También es posible especificar múltiples temas. El mandato falla y devuelve el código de retorno MQRCCF_REG_OPTIONS_ERROR, en ambos casos.

LeaveOnly  
(MQPSC_LEAVE_ONLY)

Cuando se especifica esto con un SubIdentity que se encuentre en el conjunto de identidades para una suscripción; la SubIdentity se elimina del conjunto de identidades de la suscripción. La suscripción no se elimina del intermediario incluso si el conjunto de identidades resultante está vacío. Si el valor de SubIdentity no está en el conjunto de identidades, el mandato no se ejecutará correctamente y devolverá el código de retorno MQRCCF_SUB_IDENTITY_ERROR.

Si se especifica LeaveOnly sin ninguna subidentidad (SubIdentity), el mandato no se ejecuta correctamente y devuelve el código de retorno MQRCCF_REG_OPTIONS_ERROR.

Si no es especifica ni LeaveOnly ni una SubIdentity, la suscripción se elimina independientemente del contenido del conjunto de identidades para la suscripción.

None  
(MQPSC_NONE)

Todas las opciones adoptan su valor por omisión. Esto surte el mismo efecto que omitir la propiedad de opciones de registro. Si se especifican otras opciones simultáneamente, se ignora None.

VariableUserId  
(MQPSC_VARIABLE_USER_ID)

Cuando se especifica la identidad del suscriptor (cola, gestor de colas e id de correlación), no está limitada a un solo ID de usuario. Esto difiere del comportamiento existente del intermediario que asocia el ID de usuario del mensaje de registro original a la identidad del suscriptor y que, a partir de ese momento, impide que ningún otro usuario utilice dicha identidad. Si un nuevo suscriptor intenta utilizar la misma identidad, se devuelve el código de retorno MQRCCF_DUPLICATE_SUBSCRIPTION.

Cualquier usuario puede modificar o anular el registro de la suscripción si tiene la autorización adecuada, evitando la comprobación existente que establece que el ID de usuario debe coincidir con el del suscriptor original.

Para añadir esta opción a una suscripción existente, el mandato ha de proceder del mismo ID de usuario que la suscripción original propiamente dicha.

Si la suscripción cuyo registro se ha de anular tiene establecida la opción VariableUserId, esta debe establecerse en el momento de anular el registro para indicar la suscripción a la que se está anulando el registro. De lo contrario, se utiliza el ID de usuario del mandato de anulación de registro de suscriptor para identificar la suscripción. Esto queda anulado, junto con los demás identificadores de suscriptor, si se facilita un nombre de suscripción.

El valor por omisión, si se omite esta propiedad, es que no se establece ninguna opción de registro.

<QMgrName> (MQPSC_Q_MGR_NAME)
El valor es el nombre del gestor de colas para la cola de suscriptores. Ha de coincidir con el nombre del gestor de colas (QMgrName) utilizado en la suscripción original.

Si se omite esta propiedad, el valor por omisión es el nombre del gestor de la cola de respuestas (ReplyToQMgr) que hay en el descriptor del mensaje (MQMD). Si el nombre resultante está en blanco, se adopta por omisión el nombre del gestor de colas del intermediario.

<QName> (MQPSC_Q_NAME)
El valor es el nombre de la cola de suscriptores. Ha de coincidir con el nombre de cola (QName) usado en la suscripción original.

Si se omite esta propiedad, el valor por omisión es el nombre de la cola de respuestas (ReplyToQ) en el descriptor del mensaje (MQMD), y no ha de estar en blanco.

<SubName> (MQPSC_SUBSCRIPTION_NAME)
Si especifica SubName en un mandato de anulación de registro de suscriptor, el valor de SubName (subnombre) tendrá prioridad sobre todos los demás campos del identificador excepto el del ID de usuario, a menos que en la suscripción propiamente dicha se haya establecido VariableUserId. Si no se ha establecido VariableUserId (ID de usuario variable), el mandato anulación de registro de suscriptor se produce únicamente si el ID de usuario del mensaje de mandato coincide con el de la suscripción. Si no es así, el mandato no se ejecutará correctamente y se recibirá el código de retorno MQRCCF_DUPLICATE_IDENTITY.

Si existe una suscripción que coincida con la identidad tradicional de este mandato, pero no tiene SubName, el mandato de anulación de registro de suscriptor fallará y se recibirá el código de retorno MQRCCF_SUB_NAME_ERROR. Si se intenta anular el registro de una suscripción que tiene un SubName utilizando un mensaje de mandato que coincida con la identidad tradicional pero sin especificar ningún SubName, el mandato se ejecuta correctamente.

<SubUserData> (MQPSC_SUBSCRIPTION_USER_DATA)
Esta es una serie de caracteres de longitud variable. El valor lo almacena el intermediario con la suscripción, aunque no influye en la entrega de la publicación al suscriptor. El valor puede modificarse anulando el registro de la misma suscripción con un valor nuevo. Este atributo se ha concebido para que lo utilice la aplicación.

Los SubUserData (datos de subusuario) se devuelven en la información del Metatopic (MQCACF_REG_SUB_USER_DATA) de una suscripción, si existen.

Ejemplo

Este es un ejemplo de NameValueData para un mensaje de mandato de anulación de registro de suscriptor. En este ejemplo, la aplicación de ejemplo está anulando el registro de su suscripción a los temas que contienen el último resultado de todos los partidos. La identidad del suscriptor, incluido el CorrelId, se toma de los valores por omisión del MQMD.
 <psc>
  <Command>DeregSub</Command>
  <RegOpt>CorrelAsId</RegOpt>
  <Topic>Sport/Soccer/State/LatestScore/#</Topic>
 </psc>
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
aq06970_