Filtrando o Conteúdo da Mensagem de Publicações
Em vez de receber todas as mensagens em um tópico do qual você é assinante, o seu aplicativo de consumo pode utilizar seletores de Caminho XML (XPath) para filtrar as mensagens com base no conteúdo de cada mensagem. Esta assinatura baseada em conteúdofornece maior flexibilidade na definição do tipo de informações que você deseja receber e seus aplicativos não precisam manipular suas próprias filtragens. O desempenho é melhorado porque as mensagens que não são relevantes não são enviadas de modo desnecessário do servidor para o aplicativo.
Sobre Esta Tarefa
O modelo de sistema de mensagens de publicação e assinatura WS-Notification baseia-se no tópico. Cada publicação é classificada como pertencente a um de um conjunto fixo de tópicos. Os publicadores rotulam cada publicação com um nome de tópico e os consumidores assinam todas as publicações sobre um determinado tópico. Por exemplo, um sistema de notificação do mercado de ações poderá definir um tópico para cada emissão: os publicadores postam informações rotuladas com a emissão apropriada, como o nome do tópico, e os assinantes assinam as informações relacionadas a uma emissão.
- nome da emissão
- preço
- volume de ações
(issue="IBM") and (price<120) and (volume>1000)
Você codifica seus filtros de conteúdo de mensagem XPath 1.0 nos aplicativos de assinatura usando a linguagem XML Path (XPath), Versão 1.0..
Para filtrar o conteúdo de menagens de publicações usando seletores XPath, conclua as etapas a seguir.
Procedimento
- Crie um novo aplicativo que assina um consumidor do WS-Notification.
- Codifique um filtro de conteúdo da mensagem XPath no aplicativo de assinatura. Para obter um exemplo do código para fazer isso, consulte Exemplo: Efetuando Assinatura de um Consumidor do WS-Notification. Para obter um exemplo do uso do filtro de conteúdo de mensagens, consulte o exemplo no final desta tarefa.
- Codifique a manipulação de erros para casos em que o filtro não é válido.
- Chame o aplicativo.
Exemplo
Este código XML de exemplo ilustra a filtragem do conteúdo de mensagens usando seletores XPath. Neste exemplo, uma empresa, representada por um aplicativo NotificationConsumer, deseja ser notificada de transferências bancárias acima de $1.000.000. O aplicativo de monitoramento assina em nome de NotificationConsumer especificando um filtro de conteúdo de mensagem XPath Versão 1.0 válido na seguinte mensagem de assinatura WS-Notification:
<wsnt:Subscribe>
<wsnt:ConsumerReference>
wsa:EndpointReference
</wsnt:ConsumerReference>
<wsnt:Filter>
[ <wsnt:TopicExpression Dialect="xsd:anyURI">
{any} ?
</wsnt:TopicExpression> |
<wsnt:ProducerProperties Dialect="xsd:anyURI">
{any} ?
</wsnt:ProducerProperties> |
<wsnt:MessageContent Dialect="xsd:anyURI">
/bankTransfer[value %gt; 1,000,000]
</wsnt:MessageContent> |
{any} *
] *
</wsnt:Filter> ?
<wsnt:InitialTerminationTime>
[xsd:dateTime | xsd:duration]
</wsnt:InitialTerminationTime> ?
<wsnt:SubscriptionPolicy>
[ <wsnt:UseRaw/> |
{any}
] *
</wsnt:SubscriptionPolicy> ?
{any}*
</wsnt:Subscribe>
O serviço WS-Notification armazena a assinatura e seu filtro.
Um outro aplicativo WS-Notification, em seguida, publica uma notificação na qual o corpo da mensagem contém as seguintes informações:
<bankTransfer origin="123456 87654321" target="224466 88664422">
<originName>IBM Corporation</originName>
<targetName>Matt Roberts</targetName>
<date>02/02/2006</date>
<value currency="USD">100,000,000</value>
</bankTransfer>
O serviço WS-Notification no servidor de aplicativos corresponde esta publicação com a assinatura anterior e entrega a notificação ao consumidor especificado na assinatura.