Nachrichteninhalt von Veröffentlichungen filtern
Anstatt alle Nachrichten in einem von Ihnen subskribierten Topic zu empfangen, kann die konsumierende Anwendung XPath-Selektoren (XML Path) verwenden, um die Nachrichten auf der Basis der Nachrichteninhalte zu filtern.. Diese inhaltsbasierte Subskription bietet eine höhere Flexibilität bei der Definition des Typs von Informationen, die Sie empfangen möchten. Sie ermöglicht Ihren Anwendungen, die Verantwortung für ihre eigene Filterung abzutreten, und verbessert die Leistung dadurch, dass Nachrichten nicht unnötigerweise vom Server an die Anwendung übertragen werden.
Informationen zu diesem Vorgang
Das WS-Notification-Messaging-Modell für Publish/Subscribe-Operationen basiert auf Topics. Jede Veröffentlichung wird klassifiziert und einem festen Satz von Topics zugeordnet. Publisher (Veröffentlichungskomponenten) kennzeichnen jede Veröffentlichung mit einem Topicnamen, und Konsumenten subskribieren alle Veröffentlichungen in einem bestimmten Topic. Ein Benachrichtigungssystem für Aktienhandel könnte beispielsweise für jedes Problem ein Topic definieren. Die Publisher veröffentlichen Informationen unter einem Topicnamen, der dem jeweiligen Problem entspricht, und Subskribenten subskribieren die Informationen, die ein bestimmtes Problem betreffen.
- Problemname
- Preis
- Aktienmenge
issue="IBM") and (price<120) and (volume>1000)
Sie codieren die Nachrichteninhaltsfilter der XPath Version 1.0 in den subskribierenden Anwendungen mit XML Path (XPath) Language Version 1.0..
Führen Sie die folgenden Schritte aus, um den Nachrichteninhalt von Veröffentlichungen mithilfe von XPath-Selektoren zu filtern:
Vorgehensweise
- Erstellen Sie eine neue Anwendung, die einen WS-Notification-Konsumenten subskribiert.
- Codieren Sie einen XPath-Nachrichteninhaltsfilter in der subskribierenden Anwendung. Diesbezüglichen Beispielcode finden Sie im Artikel Beispiel: Subskription eines WS-Notification-Konsumenten. Ein Beispiel für die Verwendung des Nachrichteninhaltsfilters finden Sie in dem Beispiel am Ende dieser Task.
- Codieren Sie eine Fehlerbehandlung für solche Fälle, in denen der Filter nicht gültig ist.
- Rufen Sie die Anwendung auf.
Beispiel
Dieser XML-Mustercode veranschaulicht das Filtern von Nachrichteninhalten über XPath-Selektoren. In diesem Beispiel möchte ein Geschäft, das durch eine NotificationConsumer-Anwendung dargestellt wird, über Banküberweisungen benachrichtigt werden, die die Höhe von 1.000.000 Dollar überschreiten. Die Überwachungsanwendung führt die Subskription im Namen der NotificationConsumer-Anwendung durch und gibt einen gültigen Nachrichteninhaltsfilter der XPath Version 1.0 in der folgenden WS-Notification-Subskriptionsnachricht an:
<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>
Der WS-Notification-Service speichert die Subskription und den zugehörigen Filter.
Anschließend veröffentlicht eine andere WS-Notification-Anwendung eine Benachrichtigung, in der der Nachrichtenhauptteil die folgenden Informationen enthält:
<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>
Der WS-Notification-Service im Anwendungsserver gleicht diese Veröffentlichung mit der vorherigen Subskription ab und stellt die Benachrichtigung dem in der Subskription angegebenen Konsumenten zu.