WebSphere MQ fornece a capacidade de especificar um filtro quando uma assinatura é feita, mas isso pode se referir apenas a itens em cabeçalhos. WebSphere Message Broker pode atuar como provedor de filtragem um conteúdo para WebSphere MQe estendido a ser especificado por filtros permite que os assinantes que podem se referir a elementos no corpo de publicações.
filtragem de conteúdo deve ser ativada no broker para esse serviço para estar disponível para assinantes do WebSphere MQ .
Antes de começar
- Leia sobre Seletores em WebSphere MQ.
- Leia a seguinte visão geral sobre como o WebSphere MQ seleciona o conteúdo
de mensagens.
Quando um aplicativo publica em uma cadeia de tópicos, na qual um ou mais assinantes têm uma
cadeia de seleção selecionando no conteúdo da mensagem, o WebSphere MQ solicita
que o provedor de seleção da mensagem estendida analise a publicação e informe ao
WebSphere MQ se a publicação corresponde aos critérios de seleção especificados
por cada assinante com um filtro de conteúdo.
Se o provedor de seleção de mensagem estendida determinar
que a publicação corresponde à cadeia de seleção do assinante, a mensagem continua sendo entregue ao
assinante.
Se o provedor de seleção de mensagem estendida determinar que a publicação não corresponde,
a mensagem não é entregue ao assinante. Isto pode fazer com que a chamada MQPUT ou MQPUT1 de
WebSphere MQ falhe com o código de razão MQRC_PUBLICATION_FAILURE. Se o provedor
de seleção da mensagem estendida não puder analisar a publicação, o código de razão MQRC_CONTENT_ERROR será
retornado e a chamada MQPUT ou MQPUT1 falhará.
Se o provedor de seleção da mensagem estendida estiver
indisponível ou não puder determinar se o assinante deve receber a publicação, o código de razão
MQRC_SELECTION_NOT_AVAILABLE será retornado e a chamada MQPUT ou MQPUT1 de
WebSphere MQ falhará.
Quando uma assinatura está sendo criada com um
filtro de conteúdo e o provedor de seleção da mensagem estendida não está disponível, a chamada MQSUB de
WebSphere MQ falha com o código de razão MQRC_SELECTION_NOT_AVAILABLE. Se uma
assinatura com um filtro de conteúdo estiver sendo retomada e o provedor de seleção da mensagem estendida não
estiver disponível, a chamada MQSUB do WebSphere MQ retornará um aviso de
MQRC_SELECTION_NOT_AVAILABLE, mas a assinatura terá permissão para continuar.
Para sistemas z/OS, verifique se o ID da tarefa iniciada pelo message broker possui permissão de acesso UPDATE ao perfil <MQ_QMNAME>.BATCH da classe MQCONN.


Nos sistemas Linux, UNIX e Windows, conceda autorização ao sistema para o gerenciador de filas: setmqaut -t <qmgr> +sistema -p <brokerUserId>
WebSphere Message Broker estende o suporte à seleção de
mensagem fornecido pelo WebSphere MQ. WebSphere Message Broker
faz isto permitindo instruções ESQL em vez de instruções SQL92, e filtragem baseada no conteúdo da mensagem. Consulte Filtragem Baseada em Conteúdo Usando ESQL para obter detalhes do escopo e exclusões de ESQL suportado.
As principais diferenças externas na implementação atual da filtragem baseada em conteúdo são:
- A filtragem baseada em conteúdo não é mais limitada aos assinantes MQRFH2 do
WebSphere MQ. WebSphere Message Broker fornece serviços de
filtragem de conteúdo para os seguintes assinantes do WebSphere MQ:
Se estiver executando filtragem de conteúdo
baseada no campo
NameValueData, dentro do cabeçalho MQRFH2, no
z/OS, os dados podem estar presentes no primeiro ou segundo cabeçalho MQRFH2. Por exemplo, o filtro:
Root.MQRFH2.mcd.Msd='XML'
pode não funcionar conforme o esperado no
z/OS.
Use a seguinte sintaxe para procurar todos os cabeçalhos MQRFH2:
FOR ANY Root.MQRFH2[] AS I (I.mcd.Msd='XML')
- As propriedades de mensagem do WebSphere MQ são suportadas como parte da
expressão de filtro.
- Se a publicação não contiver uma pasta mcd, a carga útil será assumida como sendo
XMLNSC.
Leia as etapas a seguir para ver como ativar a filtragem basdeada em conteúdo no
WebSphere Message Broker.
- Configure a propriedade cbfEnabled do objeto ContentBasedFiltering
para o grupo de execução no qual você deseja que a filtragem baseada em conteúdo seja executada.
Configure a propriedade
cbfEnabled a partir da linha de comandos usando:
Observe que você deve ativar explicitamente a propriedade cbfEnabled para que a filtragem
baseada em conteúdo funcione; a configuração padrão é para a filtragem baseada em conteúdo ficar desativada.
- Reinicie o grupo de execução para a mudança surtir efeito.
Se você ativar a filtragem baseada em
conteúdo em diversos grupos de execução no z/OS, a filtragem baseada em conteúdo ficará ativa em apenas
um grupo de execução por vez. Os grupos de execução subsequentes cujo conteúdo baseado em filtragem está ativo, propaga as seguintes mensagens para o syslog na inicialização (para cada conteúdo baseado no encadeamento de filtragem) e, em seguida, a cada 30 minutos, conforme falham em conectar o gerenciador de filas:
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)
Se você parar o grupo de execução que está atualmente fornecendo serviços de filtragem baseados em conteúdo, outro grupo de execução, para o qual a filtragem baseada em conteúdo está ativa, conecta-se ao gerenciador de filas e fornece serviços de filtragem baseados em conteúdo.
Ambas as propriedades evaluationThreads e validationThreads são
padronizadas como um se a filtragem baseada em conteúdo estiver ativada.
Os encadeamentos de avaliação são usados para validar filtros de conteúdo com relação a uma determinada
publicação no momento da publicação. Uma rede com um número alto de publicações pode requerer que a
propriedade evaluationThreads seja aumentada (até um máximo de 32) para tratar a carga de
trabalho no momento da publicação.
Os encadeamentos de validação são usados para validar a sintaxe dos filtros de conteúdo no momento da
assinatura. Uma rede do Publicação/Assinatura com um alto número de assinantes,
especialmente se assinantes dinâmicos, pode requerer que a propriedade validationThreads
seja aumentada (até um máximo de 32) para manipular o alto rendimento dos pedidos de assinatura.
É possível ativar esta função em múltiplos grupos de execução, mas é necessário assegurar que qualquer
conjunto de mensagens requerido para analisar qualquer mensagem publicada (e referenciada na pasta
mcd dessa mensagem) seja implementado em todos os grupos de execução que foram ativados para
filtragem baseada em conteúdo.
Quaisquer erros encontrados ao analisar a mensagem no encadeamento de avaliação fazem com que
WebSphere MQ retorne MQRC_CONTENT_ERROR ao aplicativo de publicação. O erro de
análise aparece também no log de eventos como uma exceção WebSphere Message Broker.
Exemplo de uma pasta
<psc> de assinatura processando propriedades de ESQL e
mensagem no 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>