パブリケーションのメッセージ・コンテンツのフィルター
サブスクライブしたトピックにあるすべてのメッセージを受信する代わりに、 ご使用のコンシューマー・アプリケーションで XML Path (XPath) セレクターを使用して、各メッセージの内容に基づいてメッセージをフィルターに掛けることができます。. この内容ベースのサブスクリプションを使用すると、受信する情報のタイプを非常に柔軟に定義できるほか、アプリケーションで独自のフィルタリングを処理する必要がありません。関係のないメッセージがサーバーからアプリケーションに不要に送信されないため、パフォーマンスが向上します。
このタスクについて
WS-Notification パブリッシュおよびサブスクライブ・メッセージング・モデル はトピック・ベースです。各パブリケーションは、一連のトピックのいずれか 1 つに属するように分類されます。 パブリッシャーは各パブリケーションにトピック名を付け、 コンシューマーは特定のトピックに属するすべてのパブリケーションをサブスクライブします。 例えば、株取引通知システムで、株式ごとにトピックを定義できるとします。 パブリッシャーは株式の名前をトピック名としてその株式に関連する情報をポストし、 サブスクライバーは株式に関連する情報をサブスクライブします。
- 株式名
- 株価
- 株式数
(issue="IBM") and (price<120) and (volume>1000)
XML Path (XPath) Language バージョン 1.0 を使用して、サブスクライブ・アプリケーションに XPath 1.0 メッセージ・コンテンツ・フィルターをコーディングします。
XPath セレクターを使用してパブリケーションのメッセージ・コンテンツをフィルターに掛ける には、以下のステップを実行します。
手順
- WS-Notification コンシューマーをサブスクライブする新規のアプリケーションを作成します。
- サブスクライブ・アプリケーションに XPath メッセージ・コンテンツ・フィルターをコーディングします。 この方法のコード例については、 例: WS-Notification コンシューマーのサブスクリプションを参照してください。 メッセージ・コンテンツ・フィルターの使用例については、このタスクの最後に記載されている例を参照してください。
- フィルターが無効である場合のエラー処理をコーディングします。
- アプリケーションを起動します。
例
次の XML コード例では、XPath セレクターを使用するメッセージ・コンテンツ・フィルターを示します。この例では、NotificationConsumer アプリケーションで表されるビジネスに、$1,000,000 を超える銀行振替を通知する必要があります。 次の WS-Notification サブスクライブ・メッセージで、モニター・アプリケーションは、 NotificationConsumer に代わってサブスクライブし、 有効な 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 サービスはサブスクリプションとそのフィルターを保管します。
もう 1 つの 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 サービスは、このパブリケーションを直前のサブスクリプションに突き合わせて、 サブスクリプションで指定されているコンシューマーに通知を送信します。