Soccer Results サンプルについて
SoccerResults サンプルは、パブリッシュ/サブスクライブ・タイプのメッセージングを使用して、データをトランスポートします。
詳細については、WebSphere Message Brokers の資料で、パブリッシュ/サブスクライブ・メッセージングを参照してください。
Soccer Results サンプルは、サッカーの試合の最中にその試合のスコアをレポートする結果収集サービスを例示しています。このサンプルは、試合結果をシミュレートしてパブリッシュする 1 つ以上のパブリッシャー・アプリケーション、および現在行われているすべての試合結果をサブスクライブする 1 つのサブスクライバー・アプリケーションで構成されています。シミュレートした試合でゴールが入ると、そのゴールが入った時間とどちらのチームが得点したのかという情報がパブリッシュされます。
Soccer Results サンプルには、コマンド行から実行する 2 つの小規模なアプリケーションが組み込まれています。
- SoccerResults。サブスクライバー。現在行われているサッカーのすべての試合の結果をサブスクライブします。1 度に 1 つだけ SoccerResults のインスタンスを実行します。
- SoccerGame。パブリッシャー。サッカーの試合をシミュレートして、ゴールが入るとイベント情報をパブリッシュします。1 度に 1 つ以上の SoccerGame のインスタンスを実行できます。
Soccer Results サンプルでは、WebSphere Message Brokers パブリッシュ/サブスクライブ・アプリケーションの以下の機能が例示されています。
- イベント情報。サブスクライバー SoccerResults がこの情報を受け取る際には保存されません。
- 状態情報。ブローカーが保存します。
- トピック・ストリングによるワイルドカード・マッチング。たとえば、Sport/Soccer/Event/#。
- 同一トピックの複数パブリッシャー。つまり、同時に実行され、パブリッシュされている SoccerGame パブリケーション・アプリケーション複数インスタンス。
- パブリッシュする前に、つまり、サブスクライバーがパブリケーションを見付けられず、
試合の現行状態を判別できなくなる状態の前に行われる、トピックをサブスクライブするようにとの要求。
- サブスクライバーが使用不可の場合、サブスクライバーによるパブリケーションの送信の続行。
- サブスクライバーで障害が発生した後に、リカバリーするための保存パブリケーションの使用。
SoccerGame アプリケーションは、行われるすべての試合の現在の状態を保持します。
得点が変わるたびに、各試合の最新得点情報を含む保存されたパブリケーション・メッセージをブローカーにパブリッシュします。
したがって、エラー発生後に SoccerResults アプリケーションを再起動しても、保存されていたすべてのパブリケーションをサブスクライブして、以前の状態の試合が復元されます。
SoccerResults サンプルは以下のアクションを実行します。
- SoccerResults アプリケーションを始動すると、次のサブスクリプションをブローカーに登録します。
- 保存トピック Sport/Soccer/State/LatestScore/# のサブスクリプション。
SoccerResults アプリケーションは、明示的に要求した場合のみこのトピックのパブリケーションの受け取りを希望するものと
します。
- トピック「Sport/Soccer/Event/#」 のすべてのパブリケーションのサブスクリプション。このトピックのパブリケーションにはイベント情報が含まれているため、SoccerResults アプリケーションは SoccerGames アプリケーションより先に始動する必要があります。SoccerResults アプリケーションを先に始動しないと、パブリケーションが見つからない可能性があるので、現行状態つまり試合での現行のスコアが判別できません。
- SoccerGame アプリケーションのインスタンスを始動すると、2 つのチーム同士のサッカーの試合をシミュレートします。
- 試合が開始し、終了し、またゴールが入ると、SoccerGame アプリケーションはイベント情報を以下のトピックの SOCCER_PUBLICATION キューにパブリッシュして表示します。
- 「Sport/Soccer/Event/MatchStarted」 トピック。サッカーの試合が開始した時。
- 「Sport/Soccer/Event/ScoreUpdate」 トピック。ゴールが入るたびに。
- 「Sport/Soccer/Event/MatchEnded」 トピック。試合が終了した時。
- イベント情報が含まれるメッセージは、SoccerPublish メッセージ・フローを介して SOCCER_SUBSCRIPTION サブスクリプション・キューに渡されます。
- SoccerResults は、SOCCER_SUBSCRIPTION キューからパブリケーションを受け取ります。ステップ 1 で SoccerResults は、「Sport/Soccer/Event/#」 トピックの任意のパブリケーションをサブスクライブしたからです。こうしたパブリケーションは保存されません。新規パブリケーションを受け取ると、以前のパブリケーションはサブスクライバーにもはや関与しなくなります。
- SoccerResults は各パブリケーションを受け取ると、スコアおよび状態情報をトピック
Sport/Soccer/State/LatestScore/Team1 Team2 のブローカーにパブリッシュします。
Team1 と Team2 は、試合に参加している各チームの名前です。
この状態情報は、ブローカーによって保存パブリケーションとして保管されます。
- SoccerResults 結果サーバーで試合中に障害が発生する場合には、再始動すると Request Update コマンドを発行して、障害が発生する前にパブリッシュした「Sport/Soccer/State/LatestScore/#」 の保存パブリケーションを要求します。これは、サーバーが停止した時点での試合の状態を結果サーバーが再構成できるということです。それから、SOCCER_SUBSCRIPTION キューの「Sport/Soccer/Event/#」 トピックのすべてのイベント・パブリケーションを処理できます。これらは結果サーバーが停止していた際に SoccerGame がパブリッシュし、メッセージ・フローが処理したものです。SoccerResults 結果サーバーで障害が発生したとしても、Deregister Subscriber コマンドを発行して登録を取り消すよう依頼しなかったため、このトピックを依然としてサブスクライブします。
以下のセクションでは、サンプルのリソースを詳細に説明しています。
パブリケーション・メッセージ
Soccer Results サンプルは自己定義 XML メッセージを使用します。それには、標準メッセージ・テンプレートがあり、以下が含まれています。
- WebSphere MQ ヘッダー。メッセージ・フォーマットを識別し、メッセージを解析するのに使用するパーサーを判別するためにメッセージ・フローが使用します。
- MQRFH2 ヘッダー。パブリッシュ/サブスクライブ・コマンドが含まれています。
- 試合を行うチームとそのスコアを示すストリング。
SoccerGame アプリケーションは、このメッセージ・テンプレートの情報を使用して、イベント情報を含むメッセージを SOCCER_PUBLICATION キューにパブリッシュします。たとえば、試合が開始されると、SoccerGame アプリケーションは以下のデータを MQRFH2 ヘッダーに含むメッセージをパブリッシュします。
<psc>
<Command>Publish</Command>
<Topic>Sport/Soccer/Event/MatchStarted</Topic>
</psc>
SoccerResults アプリケーションが Team1 と Team2 の試合の最新スコアをパブリッシュすると、パブリッシュされるメッセージには、次のデータが MQRFH2 ヘッダーに含まれます。
<psc>
<Command>Publish</Command>
<PubOpt>Retain</PubOpt><Topic>Sport/Soccer/State/LatestScore/Team1 Team2</Topic>
</psc>
メッセージ・フロー
下の図は、Soccer Results サンプルでパブリケーション・メッセージを処理する SoccerPublish メッセージ・フローを
示しています。

下の表では、SoccerPublish メッセージ・フローで使用されるノードのタイプをリストしています。
ノード・タイプ |
ノード名 |
MQInput |
SOCCER_PUBLICATION |
Publication |
Publish Results |
詳しくは、WebSphere Message Brokers の資料で、SoccerPublish メッセージ・フローのノードおよびメッセージ・フローについて参照してください。
SoccerPublish メッセージ・フローには、2 つのノードしか含まれていないため、とても単純なフローです。MQInput ノードは、SOCCER_PUBLICATION パブリケーション・キューを入力キューとして識別するために構成されています。SoccerGame パブリッシャー・アプリケーションがイベント情報を、自己定義 XML メッセージとして SOCCER_PUBLICATION キューにパブリッシュする場合、MQInput ノードはそのメッセージを取得して、Publish Results Publication ノードに渡します。
Publication ノードは、イベント情報をパブリッシュしたトピックをサブスクライブした、SoccerResults サブスクライバー・アプリケーションにメッセージをパブリッシュします。
WebSphere MQ キュー
Soccer Results サンプル・メッセージ・フローは、WebSphere MQ キューと相互作用します。
そのキューは、メッセージ・フローが実行するブローカーをホストする WBRK6_DEFAULT_QUEUE_MANAGER キュー・マネージャー上に
定義されます。
下の表は、SoccerPublish メッセージ・フローが使用するキュー、およびその対話方法を示しています。
メッセージ・フロー |
キュー |
メッセージ・フローによるキューの使用方法 |
SoccerPublish |
SOCCER_PUBLICATION |
SoccerGame パブリッシャー・アプリケーションの 1 つ以上のインスタンスがキューにパブリッシュした、イベント情報を取得します。 |
SOCCER_SUBSCRIPTION |
SoccerResults サブスクライバー・アプリケーションのキュー上にパブリケーションを入れ、ブローカーにパブリッシュします。 |
サンプルのホームに戻る