Mensaje de Deregister Subscriber

El mensaje de mandato de Deregister Subscriber se envía a un intermediario desde un suscriptor, o a otra aplicación de parte de un suscriptor, para indicar que el suscriptor ya no desea recibir mensajes que coincidan con los parámetros establecidos.

Este mensaje se envía a SYSTEM.BROKER.CONTROL.QUEUE, la cola de control del intermediario. Para transferir un mensaje a esta cola, el usuario debe tener la autorización necesaria.

Consulte el apartado Configuración de MQMD en los mensajes de mandatos enviados al intermediario para obtener información detallada acerca de los parámetros del descriptor de mensaje (MQMD), necesarios al enviar un mensaje de mandato al intermediario.

El registro de una suscripción individual puede anularse especificando los valores de tema, punto de suscripción y filtro correspondientes de la suscripción original. Si no se ha especificado alguno de los valores (es decir, se tomaron los valores por omisión) en la suscripción original, dicho valor deberá omitirse al anularse el registro de la suscripción.

Los registros de todas las suscripciones de un suscriptor o un grupo de suscriptores pueden anularse utilizando la opción DeregAll. Por ejemplo, si se especifica DeregAll así como un punto de suscripción (pero no el tema ni el filtro), se anularán los registros de todas las suscripciones del suscriptor del punto de suscripción especificado, independientemente del tema y el filtro. Se permite cualquier combinación de tema, filtro y punto de suscripción; si se especifican estas tres cosas, sólo podrá podrá coincidir una suscripción y la opción DeregAll se omitirá.

El mensaje debe enviarlo el suscriptor que haya registrado la suscripción; para confirmar que se trata de dicho suscriptor, es necesario comprobar el ID de usuario del suscriptor.

Los registros de las suscripciones también puede anularlos un administrador del sistema. No obstante, las suscripciones registradas con una cola dinámica temporal están asociadas con la cola, no sólo con el nombre de la cola. Si se suprime la cola, de forma explícita o debido a la desconexión de la aplicación del gestor de colas, ya no será posible utilizar el mandato Deregister Subscriber para anular el registro de las suscripciones de dicha cola. Para anular el registro de las suscripciones puede utilizarse el área de trabajo y el intermediario las eliminará automáticamente la próxima vez que haga coincidir una publicación con la suscripción o la próxima vez que rearranque. En circunstancias normales, las aplicaciones deben 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 que indica que su petición se ha procesado correctamente, es posible que algunas publicaciones lleguen todavía a la cola de suscriptores si el intermediario las estaba procesando al mismo tiempo en que se anuló el registro de la suscripción. Si no se eliminan los mensajes de la cola, puede producirse una acumulación de mensajes sin procesar en la cola de suscriptores. Si la aplicación ejecuta un bucle que incluye una llamada MQGET con el CorrelId adecuado después de un período de desactivación, estos mensajes se quitan de la cola. Si utiliza el protocolo SCADA Device, dispone de una opción de inicio y final limpio. Esto significa que los mensajes se eliminan para el cliente.

De forma similar, si el suscriptor utiliza una cola dinámica permanente y anula el registro de la cola y la cierra con la opción MQCO_DELETE_PURGE en una llamada MQCLOSE, es posible que la cola no está vacía. Si todavía hay publicaciones de intermediario pendientes de confirmación al suprimir la cola, la llamada MQCLOSE emite un código de retorno MQRC_Q_NOT_EMPTY. La aplicación puede evitar este problema entrando en un período de suspensión y emitiendo de nuevo la llamada MQCLOSE de vez en cuando.

Propiedades

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

Esta propiedad debe especificarse.

<Tema> (MQPSC_TOPIC)
El valor es una serie de caracteres que contiene el tema cuyo registro debe anularse.

Opcionalmente, esta propiedad puede repetirse si va a anularse el registro de varios temas. Puede omitirse si se especifica DeregAll en la propiedad <RegOpc>.

Los temas especificados pueden ser un subconjunto de los temas registrados si el suscriptor desea retener suscripciones para otros temas. Los comodines están permitidos, pero la serie de caracteres de un tema que contenga comodines debe coincidir exactamente con la serie de caracteres correspondiente especificada en el mensaje de mandato de Register Subscriber.

<SubPunto> (MQPSC_SUBSCRIPTION_POINT)
El valor es una serie de caracteres que especifica el punto de suscripción desde el que va a separarse la suscripción.
Esta propiedad no debe repetirse. Puede omitirse si se especifica un <Tema> o si se especifica DeregAll en <RegOpc>. Si omite esta propiedad, ocurre lo siguiente:
  • Si no especifica DeregAll, los registros de las suscripciones que coinciden con la propiedad <Tema> (y la propiedad <Filtro>, si existe) se anulan del punto de suscripción por omisión.
  • Si especifica DeregAll, los registros de todas las suscripciones (que coinciden con las propiedades <Tema> y <Filtro>, si existe) se anulan de todos los puntos de suscripción.

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

<SubIdentidad> (MQPSC_SUBSCRIPTION_IDENTITY)
Es una serie de caracteres de longitud de variable cuya longitud máxima es de 64 caracteres. Se utiliza para representar una aplicación con un interés en una suscripción. El intermediario mantiene un conjunto de identidades de suscriptor para cada suscripción. Cada suscripción puede permitir que su conjunto de identidades retenga únicamente una sola identidad o un número ilimitado de identidades.

Si SubIdentity está en el conjunto de identidades de la suscripción, se eliminará del conjunto. Si debido a ello el conjunto de identidades se queda vacío, la suscripción de elimina del intermediario a menos que se especifique LeaveOnly como un valor de la propiedad RegOpc. Si el conjunto de identidades todavía contiene otras identidades, la suscripción no se elimina del intermediario y el flujo de publicaciones no se interrumpe.

Si se especifica SubIdentity pero la SubIdentity no está en el conjunto de identidades de la suscripción, el mandato Deregister Subscribe falla con el código de retorno MQRCCF_SUB_IDENTITY_ERROR.

<Filtro> (MQPSC_FILTER)
El valor es una serie de caracteres que especifica el filtro cuyo registro se va a anular. Debe coincidir exactamente, incluidas las mayúsculas y minúsculas y los espacios, con un filtro de suscripción que se haya registrado previamente.

Opcionalmente, esta propiedad puede repetirse si va a anularse el registro de varios filtros. Puede omitirse si se especifica un <Tema> o si se especifica DeregAll en <RegOpc>.

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

<RegOpc> (MQPSC_REGISTRATION_OPTION)
La propiedad de opciones de registro puede tomar los valores siguientes:
DeregAll  
(MQPSC_DEREGISTER_ALL)

Deben anularse los registros 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 puede repetirse.
Si no especificaDeregAll:
  • <Topic> debe 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 debe ser cero, se utiliza para identificar al suscriptor. Debe coincidir con el CorrelId utilizado en la suscripción original.

FullResp  
()

Si se especifica FullResp, todos los atributos de la suscripción se devuelven en el mensaje de respuesta si el mandato no falla.

Si se especifica FullResp, DeregAll no se permite en el mandato Deregister Subscriber. Tampoco es posible especificar varios temas. El mandato falla con el código de retorno MQRCCF_REG_OPTIONS_ERROR, en ambos casos.

LeaveOnly  
(MQPSC_LEAVE_ONLY)

Si se especifica este valor con SubIdentity, que es en el conjunto de identidades de la suscripción, la SubIdentity se elimina del conjunto de identidades de la suscripción. La suscripción no se elimina del intermediario, aunque el conjunto de identidades resultante esté vacío. Si el valor SubIdentity no se encuentra en el conjunto de identidades, el mandato falla con el código de retorno MQRCCF_SUB_IDENTITY_ERROR.

Si se especifica LeaveOnly sin ningún valor SubIdentity, el mandato falla con el código de retorno MQRCCF_REG_OPTIONS_ERROR.

Si no se especifica LeaveOnly ni ninguna SubIdentity, la suscripción se eliminará independientemente del contenido del conjunto de identidades de la suscripción.

None  
(MQPSC_NONE)

Todas las opciones toman los valores por omisión correspondientes. Esto tiene el mismo efecto que omitir la propiedad de opciones de registro. Si se especifican otras opciones al mismo tiempo, se omite None.

VariableUserId  
(MQPSC_VARIABLE_USER_ID)

Si se especifica, la identidad del suscriptor (cola, gestor de colas e IDCorrel) no se restringe a un solo ID de usuario. Esto difiere del comportamiento existente del intermediario que asocia el ID de usuario del mensaje de registro original con la identidad del suscriptor y, a partir de ese momento, evita que cualquier otro usuario utilice esa 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 dispone de la autorización adecuada, con lo que se evita comprobar que el ID de usuario coincida con el ID de usuario del suscriptor original.

Para agregar esta opción a una suscripción existente, el mandato debe proceder del mismo ID de usuario que el de la suscripción original.

Si la suscripción cuyo registro debe anularse tiene establecido el valor VariableUserId, éste debe establecerse a la hora de anulación del registro para indicar la suscripción cuyo registro va a anularse. De lo contrario, el ID de usuario del mandato Deregister Subscriber se utiliza para identificar la suscripción. Este ID se alterará temporalmente, junto con los otros identificadores de suscriptor, si se especifica un nombre de suscripción.

Si se omite esta propiedad, el valor por omisión es que no se establezca ninguna opción de registro.

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

Si se omite esta propiedad, el valor por omisión es el nombre del ReplyToMgr del descriptor de mensaje (MQMD). Si el nombre resultante está en blanco, toma como valor por omisión el nombre del gestor de colas del intermediario.

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

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

<SubNombre> (MQPSC_SUBSCRIPTION_NAME)
Si especifica SubName en un mandato Deregister Subscriber, el valor SubName precederá al resto de campos de identificador excepto al de ID de usuario, a menos que se establezca VariableUserId en la propia suscripción. Si no se establece VariableUserId, el mandato Deregister Subscriber sólo se ejecuta correctamente si el ID de usuario del mensaje de mandato coincide con el de la suscripción, de lo contrario, el mandato falla con el código de retorno MQRCCF_DUPLICATE_IDENTITY.

Si existe una suscripción que coincide con la identidad tradicional de este mandato pero no tiene ningún SubName, el mandato Deregister Subscriber falla con 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 que haya un SubName especificado, el mandato se ejecuta correctamente.

<DatosSubUsuario> (MQPSC_SUBSCRIPTION_USER_DATA)
Es una serie de caracteres de texto de longitud de variable. El intermediario almacena el valor con la suscripción, pero este valor no influye en la entrega de la publicación al suscriptor. El valor puede alterarse si se vuelve a realizar el registro a la misma suscripción con un valor nuevo. Este atributo está ahí para que lo utilice la aplicación.

La opción SubUserData se devuelve en la información de metatema (MQCACF_REG_SUB_USER_DATA) para una suscripción, si la hay.

Ejemplo

A continuación figura un ejemplo de NameValueData para un mensaje de mandato de Deregister Subscriber. En este ejemplo, la aplicación de ejemplo anula el registro de su suscripción a los temas que contienen la última puntuación para todas las coincidencias. La identidad del suscriptor, incluido 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>