Informationen zum Beispielprogramm 'Soccer Results'
Im Beispielprogramm 'Soccer Results' wird die Publish/Subscribe-Nachrichtenübertragung zum
Transport von Daten verwendet. Weitere Informationen finden Sie im Abschnitt über Publish/Subscribe-Nachrichtenübertragungen in der Dokumentation zum WebSphere Message Broker.
Im Beispielprogramm 'SoccerResults' wird ein Ergebniserfassungsdienst demonstriert, der die Ergebnisse eines Fußballspiels während dessen Austragung meldet. Das Beispielprogramm besteht aus einer oder mehreren Publisher-Anwendungen, die die Spielergebnisse simulieren und veröffentlichen, sowie aus einer Subskribenten-Anwendung, die die Ergebnisse aller Fußballspiele abonniert. Sobald in den simulierten Spielen Tore erzielt werden, werden Informationen zum Zeitpunkt des Treffers sowie zu der Mannschaft, die das Tor geschossen hat, veröffentlicht.
Das Beispielprogramm 'SoccerResults' umfasst zwei kleine Anwendungen, die über die Befehlszeile ausgeführt werden:
- Die Subskribentenanwendung 'SoccerResults', die die Ergebnisse aller ausgetragenen Fußballspiele abonniert. Von 'SoccerResults' wird immer nur jeweils eine Instanz ausgeführt.
- Die Publisher-Anwendung 'SoccerGame', die Fußballspiele simuliert und Ereignisdaten veröffentlicht, wenn Tore geschossen werden. Es können eine oder auch gleichzeitig mehrere Instanzen der Anwendung 'SoccerGame' ausgeführt werden.
Das Beispielprogramm 'Soccer Results' veranschaulicht die folgenden Funktionen
der Publish/Subscribe-Anwendungen von WebSphere Message Brokers:
- Ereignisdaten, die nicht mehr gespeichert werden, wenn sie vom Subskribenten (Soccer Results) empfangen wurden
- Statusinformationen, die vom Broker als ständige Veröffentlichungen gespeichert werden
- Platzhalterverwendung in Themenzeichenfolgen, z. B. Sport/Soccer/Event/#
- Mehrere Publisher für dasselbe Thema, d. h., es werden gleichzeitig mehrere Instanzen der Veröffentlichungsanwendung 'SoccerGame' ausgeführt, von denen Informationen veröffentlicht werden
- Die Notwendigkeit, dass ein Thema vor dessen Veröffentlichung abonniert werden muss, da der Subskribentenanwendung andernfalls Veröffentlichungen verloren gehen und sie den aktuellen Spielstand nicht ermitteln kann
- Die Tatsache, dass auch dann noch Veröffentlichungen an den Subskribenten gesendet werden, wenn dieser gerade nicht verfügbar ist
- Die Verwendung von ständigen Veröffentlichungen zur Wiederherstellung des Status im Anschluss an einen Subskribentenfehler. Die Anwendung 'SoccerGame' sorgt dafür, dass der Stand aller aktiven Spiele auf dem neuesten Stand ist; jedes Mal, wenn sich der Spielstand in einem Spiel ändert, veröffentlicht er für den Broker eine ständige Veröffentlichung in Form einer Nachricht mit dem aktuellen Spielstand. Wenn Sie 'Soccer Results' nach einem Fehler also erneut starten, richtet diese Anwendung automatisch eine Subskription für alle ständigen Veröffentlichungen ein, damit der vorherige Spielstand wiederhergestellt wird.
Das Beispielprogramm 'Soccer Results' führt Folgendes aus:
- Die Anwendung 'Soccer Results' registriert bei ihrem Start die folgenden Subskriptionen beim Broker:
- Eine Subskription für das ständige Thema Sport/Soccer/State/LatestScore/#. Die Anwendung gibt jedoch an, dass Veröffentlichungen zu diesem Thema nur auf explizite Anforderung hin gesendet werden sollen.
- Eine Subskription für alle Veröffentlichungen zum Thema Sport/Soccer/Event/#. Da die Veröffentlichungen zu diesem Thema Ereignisdaten enthalten, muss die Anwendung 'Soccer Results' vor der Anwendung 'SoccerGames' gestartet werden. Wenn dies nicht der Fall ist, erhält die Anwendung 'Soccer Results' unter Umständen nicht alle Veröffentlichungen und kann daher auch nicht den aktuellen Status (d. h. den aktuellen Spielstand eines Spiels) ermitteln.
- Sobald eine Instanz der Anwendung 'SoccerGame' gestartet wird, simuliert sie ein Fußballspiel zwischen zwei Mannschaften.
- Wird das Spiel gestartet oder beendet oder wird ein Treffer erzielt, werden von der Anwendung 'SoccerGame' Ereignisdaten zu den folgenden Themen für die Warteschlange SOCCER_PUBLICATION veröffentlicht (und in dieser angezeigt):
- Thema Sport/Soccer/Event/MatchStarted, sobald ein Fußballspiel beginnt
- Thema Sport/Soccer/Event/ScoreUpdate, sobald ein Tor erzielt wird
- Thema Sport/Soccer/Event/MatchEnded, sobald das Spiel beendet wird
- Die Nachrichten mit den Ereignisdaten werden über den Nachrichtenfluss 'SoccerPublish' an die Subskriptionswarteschlange SOCCER_SUBSCRIPTION übergeben.
- 'Soccer Results' empfängt die Veröffentlichungen von der Warteschlange SOCCER_SUBSCRIPTION, da 'Soccer Results' in Schritt 1 eine Subskription für alle Veröffentlichungen zum Thema Sport/Soccer/Event/# eingerichtet hat. Diese Veröffentlichungen werden nicht permanent gespeichert, da frühere Veröffentlichungen bei Erhalt einer neuen Veröffentlichung nicht mehr für den Subskribenten von Interesse sind.
- Jedesmal, wenn 'Soccer Results' eine Veröffentlichung erhält, veröffentlicht die Anwendung für den Broker den Spielstand zum Thema: Sport/Soccer/State/LatestScore/Team1 Team2 ; dabei sind Team1 und Team2 die Namen der Mannschaften. Diese Statusinformation werden vom Broker als ständige Veröffentlichung gespeichert.
- Falls im Ergebnisserver 'Soccer Results' während eines Spiels ein Fehler auftritt, gibt er bei seinem Neustart einen Befehl zur Anforderung einer Aktualisierung aus, wodurch ständige Veröffentlichungen zum Thema Sport/Soccer/State/LatestScore/# angefordert werden, das er vor seinem Absturz veröffentlicht hat. Dies bedeutet, dass der Ergebnisserver den Spielstand wiederherstellen kann, der bei seiner Beendigung aktuell war. Anschließend kann er alle Ereignisveröffentlichungen zum Thema Sport/Soccer/Event/# in der Warteschlange SOCCER_SUBSCRIPTION verarbeiten, die von 'SoccerGame' während der Beendigung des Ergebnisservers veröffentlicht und vom Nachrichtenfluss verarbeitet wurden. Auch wenn der Ergebnisserver 'Soccer Results' fehlschlägt, bestehen seine Subskriptionen für das Thema weiterhin, da er keine Aufhebung der Registrierung mit dem Befehl zur Aufhebung der Registrierung als Subskribent angefordert hat.
In folgenden Abschnitten werden die Ressourcen des Beispielprogramms ausführlicher
erläutert:
Die Veröffentlichungsnachrichten
Das Beispielprogramm 'Soccer Results' verwendet selbstdefinierende XML-Nachrichten, denen eine Standardnachrichtenschablone zugeordnet ist. Diese Schablone enthält Folgendes:
- einen WebSphere MQ-Header, der vom Nachrichtenfluss zur Identifizierung des Nachrichtenformats und zur Ermittlung des für die Syntaxanalyse der Nachricht zu verwendenden Parsers herangezogen wird
- einen MQRFH2-Header, in dem Publish/Subscribe-Befehle enthalten sind
- eine Zeichenfolge, die die spielenden Mannschaften und ihre Tore angibt
Die Anwendung 'SoccerGame' veröffentlicht mit Hilfe der Informationen in dieser Nachrichtenschablone eine Nachricht mit Ereignisdaten für die Warteschlange SOCCER_PUBLICATION. Beim Beginn
eines Spiels beispielsweise veröffentlicht 'SoccerGame' eine Nachricht, die im MQRFH2-Header die folgenden Daten enthält:
<psc>
<Command>Publish</Command>
<Topic>Sport/Soccer/Event/MatchStarted</Topic>
</psc>
Wenn die Anwendung 'Soccer Results' den aktuellen Spielstand im Spiel zwischen Mannschaft1 und Mannschaft2 veröffentlicht, enthält die veröffentlichte Nachricht in ihrem zugehörigen MQRFH2-Header die folgenden Daten:
<psc>
<Command>Publish</Command>
<PubOpt>Retain</PubOpt><Topic>Sport/Soccer/State/LatestScore/Team1 Team2</Topic>
</psc>
Der Nachrichtenfluss
Die folgende Abbildung zeigt den Nachrichtenfluss 'SoccerPublish', der die
Veröffentlichungsnachrichten im Beispielprogramm 'Soccer Results' verarbeitet.

In der folgenden Tabelle sind die Knotentypen aufgelistet, die im Nachrichtenfluss 'SoccerPublish' verwendet werden.
Knotentyp |
Knotenname |
MQEmpfang |
SOCCER_PUBLICATION |
Veröffentlichung |
Publish Results |
Weitere Informationen finden Sie in Abschnitten zu den Knoten im Nachrichtenfluss 'SoccerPublish' und Nachrichtenflüssen in der Dokumentation zum WebSphere Message Broker.
Der Nachrichtenfluss 'SoccerPublish' ist sehr einfach strukturiert, da er lediglich zwei Knoten enthält. Der MQEmpfangsknoten ist so konfiguriert, dass er die Veröffentlichungswarteschlange SOCCER_PUBLICATION als seine Eingabewarteschlange identifiziert. Wenn die Publisher-Anwendung 'SoccerGame' Ereignisdaten in Form einer selbstdefinierenden XML-Nachricht für die Warteschlange SOCCER_PUBLICATION veröffentlicht, ruft der MQEmpfangsknoten die Nachricht ab und übergibt diese an den Veröffentlichungsknoten 'Publish Results'.
Der Veröffentlichungsknoten veröffentlicht die Nachricht für die Subskribentenanwendung 'Soccer Results', die das Thema, zu dem die Ereignisdaten veröffentlicht wurden, abonniert hat.
Die WebSphere MQ-Warteschlangen
Das Beispielprogramm 'Soccer Results' interagiert mit zwei WebSphere MQ-Warteschlangen. Diese sind im Warteschlangenmanager WBRK6_DEFAULT_QUEUE_MANAGER definiert, der den Broker enthält, in dem der Nachrichtenfluss ausgeführt wird.
Die folgende Tabelle enthält die Warteschlangen, die vom Nachrichtenfluss 'SoccerPublish' verwendet werden, sowie eine Beschreibung der jeweiligen Interaktion.
Nachrichtenfluss
|
Warteschlange |
Verwendung der Warteschlange durch den Nachrichtenfluss |
SoccerPublish |
SOCCER_PUBLICATION |
Ruft Ereignisveröffentlichungen ab, die zuvor von einer oder mehreren Instanzen der Publisher-Anwendung 'SoccerGame' für die Warteschlange veröffentlicht wurden. |
SOCCER_SUBSCRIPTION |
Reiht Veröffentlichungen in die Warteschlange ein, die von der Subskribenten-Anwendung 'Soccer Results' abgerufen und für den Broker veröffentlicht werden können. |
Zurück zum Beginn des Beispielprogramms