過濾發佈的訊息內容
您的消費端應用程式可以利用 XML 路徑 (XPath) 選取器,根據每個訊息的內容來過濾訊息,而不是接收您訂閱之主題的所有訊息. 這個內容型訂閱在定義您想要接收的資訊類型時,可提供較大的彈性,您的應用程式不需要處理本身的過濾。這樣可以增進效能,因為不相關的訊息不必從伺服器傳送到應用程式。
關於這項作業
WS-Notification 發佈和訂閱傳訊模型是以主題為基礎。 每一項發佈都分類為屬於一組固定主題的其中一個主題。 發佈者用主題名稱來標示每一項發佈,消費者訂閱特定主題的所有發佈。 例如,股票交易通知系統可能會對每項發行各定義一個主題:發佈者公佈資訊,且以適當的發行作為主題名稱來加以標示,訂閱者訂閱某項發行的相關資訊。
您可以利用 XPath 選取器,以對訊息內文的 XML 訊息內容進行評估的布林表示式,來過濾給定主題的訊息,例如,股票交易的主題型發佈和訂閱系統的訂閱者,可利用 XPath 選取器,同時針對三個訊息屬性來指定限制:
- 發行名稱
- 價格
- 股份數量
(issue="IBM") and (price<120) and (volume>1000)
您利用 XML 路徑 (XPath) 語言 1.0 版,在訂閱端應用程式中,編寫 XPath 1.0 訊息內容過濾器的程式碼。
註: 如果您的訂閱者應用程式使用訊息內容過濾,且編寫了指定 XPath 1.0 版 SelectorDomain 的程式碼,它們也可以對 JMS TextMessage 或 BytesMessage 類型的其他 WS-Notification 提供者的發佈進行過濾。
如需這些 JMS 訊息類型的相關資訊,請參閱Topology for WS-Notification as an entry or exit point to the service integration bus。
如果要利用 XPath 選取器來過濾發佈的訊息內容,請完成下列步驟。
程序
- 建立訂閱 WS-Notification 消費者的新應用程式。
- 在訂閱端應用程式中,編寫 XPath 訊息內容過濾器的程式碼。 如需執行這個動作的程式碼範例,請參閱Example: Subscribing a WS-Notification consumer。 如需訊息內容過濾器用法的範例,請參閱這個作業結尾的範例。
- 編寫過濾器無效案例的錯誤處理程式碼。
- 呼叫應用程式。
範例
這個範例 XML 程式碼說明利用 XPath 選取器來進行的訊息內容過濾。 在這個範例中,NotificationConsumer 應用程式所代表的企業想要接收超出 $1,000,000 的銀行轉帳通知。 監視應用程式代表 NotificationConsumer 進行訂閱,在下列 WS-Notification 訂閱訊息中,指定了有效的 XPath 1.0 版訊息內容過濾器:
<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 服務會比對這項發佈與先前的訂閱,然後將通知交付給訂閱中所指定的消費者。