过滤发布的消息内容
消费应用程序可使用 XML 路径 (XPath) 选择器来根据每个消息的内容过滤消息,而不是接收有关您已预订的主题的所有消息。. 此基于内容的预订使您能够更灵活地定义要接收的信息的类型,并且您的应用程序不必处理它们自己的过滤。因为不会无谓地将无关的消息从服务器发送到应用程序,所以改进了性能。
关于此任务
WS-Notification 发布和预订消息传递模型是基于主题的。每个发布被划分为属于某个固定主题集。发布者使用主题名称标记每个发布,使用者预订针对特定主题的所有发布。例如,股票交易通知系统可能会对每个股票定义主题:发布者公开使用相应股票作为主题名称标记的信息,订户预订有关某些股票的信息。
可使用 XPath
选择器通过使用针对消息主体的 XML 消息内容求值的布尔表达式,以针对特定主题过滤消息。例如,股票交易的基于主题的发布和预订系统的订户可能使用 XPath
选择器来同时指定针对三个消息属性的约束:
- 股票名称
- 价格
- 股票份额
(issue="IBM") and (price<120) and (volume>1000)
您使用 XML Path (XPath) 语言 V1.0编写预订应用程序中的 XPath 1.0 消息内容过滤器。
注: 如果订户应用程序使用消息内容过滤,并且这些应用程序编写为指定
XPath V1.0 SelectorDomain,那么它们还可过滤 JMS TextMessage 或 BytesMessage 类型的其他 WS-Notification 提供程序中的发布。有关这些 JMS 消息类型的更多信息,请参阅作为服务集成总线的入口点或出口点的 WS-Notification 的拓扑。
要使用 XPath 选择器过滤发布的消息内容,请完成下列步骤。
过程
- 创建预订 WS-Notification 使用者的新应用程序。
- 在预订应用程序中编写 XPath 消息内容过滤器。 有关执行此任务的示例代码,请参阅示例:预订 WS-Notification 使用者。有关消息内容过滤器用法的示例,请参阅本任务结尾的示例。
- 编写用于过滤器无效的案例的错误处理。
- 调用该应用程序。
示例
此示例 XML 代码演示如何使用 XPath 选择器来过滤消息内容。在本示例中,由 NotificationConsumer 应用程序表示的企业想要在银行转帐金额超过 $1,000,000 时得到通知。在以下 WS-Notification 预订消息中,监视应用程序代表指定有效 XPath V1.0 消息内容过滤器的 NotificationConsumer 进行预订:
<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>
WS-Notification 服务存储预订及其过滤器。
然后另一 WS-Notification 应用程序会发布通知,该通知中的消息体包含以下信息:
<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>
应用程序服务器中的 WS-Notification 服务将此发布与之前预订进行匹配,并将该通知传送给预订中指定的客户。