WebSphere MQ proporciona la capacidad de
especificar un filtro cuando se hace una suscripción,
pero esto
sólo puede hacer referencia a elementos de cabeceras. WebSphere Message Broker puede actuar como
proveedor de filtrado de contenido para
WebSphere MQ y así permite que los
suscriptores especifiquen
filtros ampliados que pueden
hacer referencia a elementos del cuerpo de las publicaciones.
El filtrado de contenido debe estar
habilitado en el intermediario para que
este servicio esté disponible para los suscriptores de
WebSphere MQ.
Antes de
empezar
- Obtenga información sobre selectores en WebSphere MQ.
- Obtenga información sobre la visión general de cómo WebSphere MQ selecciona el contenido de los mensajes.
Cuando una aplicación publica sobre una serie de tema, en que uno o más suscriptores tienen una serie de selección que selecciona el contenido del mensaje, WebSphere MQ solicita que el proveedor de selección de mensajes ampliados analice la publicación e informe a WebSphere MQ de si la publicación coincide con los criterios de selección especificados por cada suscriptor con un filtro de contenido.
Si el proveedor de selección de mensajes ampliados determina que la publicación coincide con la serie de selección del suscriptor, el mensaje se sigue entregando al suscriptor.
Si el proveedor de selección de mensajes ampliados determina que la publicación no coincide, el mensaje no se entrega al suscriptor. Esto podría causar que la llamada a MQPUT o
MQPUT1 de WebSphere MQ falle con el código de razón MQRC_PUBLICATION_FAILURE. Si el proveedor de selección de mensajes ampliados no es capaz de analizar la publicación, se devuelve el código de razón MQRC_CONTENT_ERROR y la llamada a MQPUT o MQPUT1
falla.
Si el proveedor de selección de mensajes ampliados no está disponible o no es capaz de determinar si el suscriptor debe recibir la publicación, se devuelve el código de razón MQRC_SELECTION_NOT_AVAILABLE y la llamada a MQPUT o MQPUT1
de WebSphere MQ falla.
Cuando una suscripción se crea con un filtro de contenido y el proveedor de selección de mensajes ampliados no está disponible, la llamada a MQSUB de WebSphere MQ falla con el código de razón MQRC_SELECTION_NOT_AVAILABLE. Si una suscripción con un filtro de contenido se reanuda y el proveedor de selección de mensajes ampliados no está disponible, la llamada a MQSUB de WebSphere MQ devuelve el aviso
MQRC_SELECTION_NOT_AVAILABLE, pero se permite que se reanude la suscripción.
Para sistemas z/OS,
verifique que el ID de tarea iniciada del intermediario de mensajes tiene permiso de
acceso UPDATE al perfil <MQ_QMNAME>.BATCH de
la clase MQCONN.


En sistemas
Linux,
UNIX y
Windows, otorgue autorización para el sistema
al gestor de colas: setmqaut -t <gestor_colas> +system -p
<idUsuarioIntermediario>
WebSphere Message Broker amplía el soporte de selección de mensajes proporcionado por WebSphere MQ. WebSphere Message Broker lo realiza al permitir sentencias ESQL en vez de sentencias SQL92 y el filtrado basado en el contenido de los mensajes. Consulte Filtrado basado en contenido utilizando ESQL para obtener detalles del ámbito y las exclusiones de ESQL soportado.
Las diferencias externas principales en la implementación actual del filtrado basado en contenido son:
- El filtrado basado en contenido ya no está limitado a suscriptores de MQRFH2 de WebSphere MQ. WebSphere Message Broker proporciona servicios de filtrado de contenido para los suscriptores siguientes
de WebSphere MQ:
Si está llevando a cabo un filtrado de contenido basado en el campo
NameValueData, en una cabecera MQRFH2, en
z/OS, los datos se pueden presentar en la primera o segunda cabecera MQRFH2. Por ejemplo, el filtro:
Root.MQRFH2.mcd.Msd='XML'
puede que no funcione tal como esperaba en
z/OS.
Utilice la sintaxis siguiente para buscar todas las cabeceras 'QRFH2:
FOR ANY Root.MQRFH2[] AS I (I.mcd.Msd='XML')
- Las propiedades de mensajes de WebSphere MQ están soportadas como parte de la expresión de filtro.
- Si la publicación no contiene una carpeta mcd, se supone que la carga útil es XMLNSC.
Lea los pasos siguientes para ver cómo se habilita el filtrado basado en contenido
en WebSphere Message Broker.
- Establezca la propiedad cbfEnabled del objeto
ContentBasedFiltering para el grupo de ejecución en el que desea que se ejecute el filtrado basado en contenido.
Establezca la propiedad
cbfEnabled de la línea de mandatos utilizando:
Observe que debe habilitar explícitamente la propiedad cbfEnabled para que funcione el filtrado basado en contenido; el valor predeterminado es que el filtrado basado en contenido esté desactivado.
- Reinicie el grupo de ejecución para que el cambio entre en vigor.
Si habilita el filtrado basado en el contenido en varios grupos
de ejecución en z/OS, el filtrado basado en el contenido
estará activo solamente en un grupo de ejecución en cualquier momento. Los posteriores grupos de ejecución para los que está habilitado el filtrado basado en contenido, propagan los mensajes siguientes al registro del sistema en el momento de arranque (para cada hebra de filtrado basado en el contenido) y, a continuación, cada 30 minutos, porque fallan al intentar conectarse al gestor de colas:
BIP2111E MQ04BRK jheg1 15 MESSAGE BROKER INTERNAL ERROR: DIAGNOSTIC INFORMATION
'Error occurred in Content Based Filtering Thread'. : ImbCbfWorker(909)
BIP2624E MQ04BRK jheg1 14 UNABLE TO CONNECT TO QUEUE MANAGER 'MQ04': MQCC=2;
MQRC=2002; MESSAGE FLOW NODE 'ContentBasedFiltering'. : ImbCbfWorker(214)
Si detiene el grupo de ejecución que actualmente está proporcionando servicios de filtrado basado en el contenido, otro grupo de ejecución para el que está habilitado el filtrado del contenido se conecta al gestor de colas y proporciona servicios de filtrado basado en el contenido.
Las propiedades evaluationThreads y validationThreads toman de forma predeterminada el valor uno si el filtrado basado en contenido está habilitado.
Las hebras de evaluación se utilizan para validar filtros de contenido respecto a una publicación determinada durante la publicación. Una red con un número elevado de publicaciones puede necesitar que aumente el valor de la propiedad
evaluationThreads (hasta un máximo de 32) para manejar la carga de trabajo durante la publicación.
Las hebras de validación se utilizan para validar la sintaxis de filtros de contenido durante la suscripción. Una red de publicación/suscripción con un elevado número de suscriptores, especialmente si los suscriptores dinámicos pueden necesitar que el valor de la propiedad validationThreads aumente (hasta un máximo de 32) para manejar la alta productividad de las solicitudes de suscripción.
Es posible habilitar esta función en varios grupos de ejecución, pero debe asegurar que cualquier conjunto de mensajes necesario para analizar cualquier mensaje publicado (y referenciado en la carpeta
mcd de ese mensaje) se despliegue en todos los grupos de ejecución que se han habilitado para el filtrado basado en contenido.
Los errores encontrados al analizar el mensaje en la hebra de evaluación causan que WebSphere MQ devuelva MQRC_CONTENT_ERROR a la aplicación de publicación. El error de análisis aparece también en el registro de sucesos como
una excepción de WebSphere Message Broker.
Ejemplo de una carpeta
<psc> que procesa propiedades de ESQL y mensajes en el filtro:
<psc>
<Command>RegSub</Command><Topic>topic</Topic>
<Filter>
SUBSTRING(Root.XMLNSC.Name.FirstName FROM 1 FOR 1) = ‘J' and usr.flag = ‘yes'
</Filter>
</psc>