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.
Esta propiedad ha de especificarse.
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.
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.
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.
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.
Se anulará el registro de todas las suscripciones coincidentes registradas para este suscriptor.
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.
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.
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.
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.
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.
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.
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.
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.
Los SubUserData (datos de subusuario) se devuelven en la información del Metatopic (MQCACF_REG_SUB_USER_DATA) de una suscripción, si existen.
<psc> <Command>DeregSub</Command> <RegOpt>CorrelAsId</RegOpt> <Topic>Sport/Soccer/State/LatestScore/#</Topic> </psc>