(57)【特許請求の範囲】
【請求項１】
メッセージを処理するメッセージブローカコンピュータシステムの方法であって、
マスタブローカコンピュータシステムが、クライアントプロデューサからメッセージを受信するステップと、
前記マスタブローカコンピュータシステムが、前記クライアントプロデューサからの前記メッセージの受信に応じて、メッセージイベントを生成するステップであって、前記メッセージイベントは、前記マスタブローカコンピュータシステムに関連付けられたエポック値と前記メッセージに関連付けられたシーケンス番号とで前記メッセージを固有に識別し、複数のイベントストアのうちの少なくとも２つによって関連持続ストレージシステムに記憶された最終メッセージへのポインタをさらに含むメッセージイベントである、ステップと、
前記マスタブローカコンピュータシステムが、前記メッセージイベントを、複数のイベントストアおよび複数のスレーブブローカコンピュータシステムへ配信するステップであって、各イベントストアは、関連持続ストレージシステム内に前記メッセージイベントを記憶し、各スレーブブローカコンピュータシステムは、関連メモリ内に前記メッセージイベントを保持する、ステップと、
前記マスタブローカコンピュータシステムが、少なくとも２つのイベントストアからの安定通知を受信するステップであって、各安定通知は前記メッセージイベントがそれぞれのイベントストアに記憶されたことを示す、ステップと、
前記マスタブローカコンピュータシステムが、前記安定通知の受信に応じて、関連持続ストレージに前記メッセージイベントを記憶し、通知を前記クライアントプロデューサへ送信するステップと、
前記マスタブローカコンピュータシステムが、前記メッセージイベントが安定化したことを示す別のメッセージイベントを生成するステップと、
前記マスタブローカコンピュータシステムが、前記別のメッセージイベントを、前記複数のイベントストアおよび前記複数のスレーブブローカコンピュータシステムへ配信するステップであって、前記別のメッセージイベントは、各スレーブブローカコンピュータシステムに、前記メッセージイベントをその関連メモリからそれぞれの持続ストレージシステムに送信させるステップとを含む、方法。
【請求項２】
各メッセージングブローカコンピュータシステムのブローカコンピュータシステム状態を記憶するステップをさらに含み、
前記ブローカコンピュータシステム状態は、前記ブローカコンピュータシステムで持続したメッセージイベントストリームを表す、請求項１に記載の方法。
【請求項３】
さらに、前記マスタブローカコンピュータシステムからメッセージイベントを受信すると、各メッセージングブローカコンピュータシステムのブローカコンピュータシステム状態を更新するステップを含み、
前記ブローカコンピュータシステム状態の更新では、前記持続ストレージからメッセージイベントを削除することと、前記メッセージイベントを前記マスタブローカコンピュータシステムから受信したメッセージイベントで上書きすることとのうちの少なくとも１つを行う、請求項２に記載の方法。
【請求項４】
さらに、前記マスタブローカコンピュータシステムが、前記メッセージイベントが安定化すると、前記メッセージイベントを前記マスタブローカコンピュータシステムの内部メモリから削除するステップを含む、請求項１に記載の方法。
【請求項５】
各スレーブブローカシステムは、前記マスタブローカコンピュータシステムからの別のメッセージイベントと前記マスタブローカコンピュータシステムからの安定メッセージイベントとのうちの少なくとも１つを受信すると、前記メッセージイベントをスレーブブローカコンピュータシステムの内部メモリから削除するよう構成され、
前記安定メッセージイベントは、前記マスタブローカコンピュータシステムでの最終既知安定メッセージイベントに関連付けられた情報を含む、請求項１に記載の方法。
【請求項６】
前記別のメッセージイベントは、メッセージイベントと、最終安定メッセージイベントに関連付けられたシーケンス番号と、前記最終安定メッセージイベントを送信した前記マスタブローカコンピュータシステムに関連付けられたエポック値と、前記メッセージイベントに関連付けられたシーケンス番号と、前記マスタブローカコンピュータシステムに関連付けられたエポック値とを含む、請求項１に記載の方法。
【請求項７】
前記マスタブローカコンピュータシステムは、前記メッセージイベントを、前記複数のスレーブブローカコンピュータシステムおよび前記複数のイベントストアへ並列に配信する、請求項１に記載の方法。
【請求項８】
１つまたは複数のプロセッサと、
前記１つまたは複数のプロセッサの少なくとも１つに動作可能に結合され、前記少なくとも１つまたは複数のプロセッサによって実行されたときに、前記少なくとも１つまたは複数のプロセッサに処理を実行させる命令を記憶した１つまたは複数のメモリとを備えた装置であって、
前記処理は、
クライアントからメッセージを受信するステップと、
前記クライアントプロデューサからのメッセージの受信に応じてメッセージイベントを生成するステップであって、前記メッセージイベントは、マスタブローカコンピュータシステムに関連付けられたエポック値と前記メッセージに関連付られたシーケンス番号とで前記メッセージを固有に識別し、前記メッセージイベントは、前記関連接続ストレージシステム内の複数のイベントストアの少なくとも２つに記憶された最終メッセージへのポインタをさらに含む、ステップと、
前記メッセージイベントを複数のイベントストアと複数のスレーブブローカコンピュータシステムへ配信するステップであって、各イベントストアは関連接続ストレージシステムにメッセージイベントを記憶し、各スレーブブローカコンピュータシステムは、関連メモリに前記メッセージイベントを保持する、ステップと、
少なくとも２つのイベントストアから安定通知を受信するステップであって、各安定通知は、前記メッセージイベントがそれぞれのイベントストアに記憶されたことを示す、ステップと、
前記安定通知の受信に対応して、前記メッセージイベントを関連持続ストレージに記憶し、前記クライアントプロデューサへ通知を送信するステップと、
前記メッセージイベントが安定化したことを示す別のメッセージイベントを生成するステップと、
前記別のメッセージイベントを前記複数のイベントストアと複数のスレーブブローカコンピュータシステムとへ配信するステップであって、前記別のメッセージイベントは、各スレーブブローカコンピュータシステムに、前記メッセージイベントをその関連メモリからそれぞれの持続ストレージシステムへ送信させる、ステップとを含む、装置。
【請求項９】
前記１つまたは複数のメモリの少なくとも１つが、前記１つまたは複数のプロセッサの少なくとも１つに実行されたときに、前記１つまたは複数のプロセッサの少なくとも１つに、各メッセージングブローカコンピュータシステムのブローカコンピュータシステム状態を記憶させるステップを実行させる命令をさらに含み、
ブローカコンピュータシステム状態は、前記ブローカコンピュータシステムで持続したメッセージイベントストリームを表す、請求項８に記載の装置。
【請求項１０】
前記１つまたは複数のメモリの少なくとも１つが、前記１つまたは複数のプロセッサの少なくとも１つに実行されたときに、前記１つまたは複数のプロセッサの少なくとも１つに、前記マスタブローカコンピュータシステムからメッセージイベントを受信すると、各メッセージングブローカコンピュータシステムのブローカコンピュータシステム状態を更新させるステップを実行させる命令をさらに含み、
前記ブローカコンピュータシステム状態の更新では、前記持続ストレージからメッセージイベントを削除することと、前記メッセージイベントを前記マスタブローカコンピュータシステムから受信したメッセージイベントで上書きすることとのうちの少なくとも１つを行う、請求項９に記載の装置。
【請求項１１】
前記１つまたは複数のメモリの少なくとも１つが、前記１つまたは複数のプロセッサの少なくとも１つに実行されたときに、前記１つまたは複数のプロセッサの少なくとも１つに、前記メッセージイベントが安定化すると、前記メッセージイベントを前記マスタブローカコンピュータシステムの内部メモリから削除させるステップを実行させる命令をさらに含む、請求項８に記載の装置。
【請求項１２】
各スレーブブローカシステムは、前記マスタブローカコンピュータシステムからの別のメッセージイベントと前記マスタブローカコンピュータシステムからの安定メッセージイベントとのうちの少なくとも１つを受信すると、前記メッセージイベントをスレーブブローカコンピュータシステムの内部メモリから削除するよう構成され、
前記安定メッセージイベントは、前記マスタブローカコンピュータシステムでの最終既知安定メッセージイベントに関連付けられた情報を含む、請求項８に記載の装置。
【請求項１３】
前記別のメッセージイベントは、メッセージイベントと、最終安定メッセージイベントに関連付けられたシーケンス番号と、前記最終安定メッセージイベントを送信した前記マスタブローカコンピュータシステムに関連付けられたエポック値と、前記メッセージイベントに関連付けられたシーケンス番号と、前記マスタブローカコンピュータシステムに関連付けられたエポック値とを含む、請求項８に記載の装置。
【請求項１４】
マスタブローカコンピュータシステムは、前記メッセージイベントを、前記複数のスレーブブローカコンピュータシステムおよび前記複数のイベントストアへ並列に配信する、請求項８に記載の装置。
【請求項１５】
１つまたは複数のコンピュータ装置の少なくとも１つによって実行されたとき、前記１つまたは複数のコンピュータ装置の少なくとも１つに処理を実行させるコンピュータ可読命令を含むコンピュータプログラムであって、
前記処理は、
クライアントからメッセージを受信するステップと、
前記クライアントプロデューサからのメッセージの受信に応じてメッセージイベントを生成するステップであって、前記メッセージイベントは、マスタブローカコンピュータシステムに関連付けられたエポック値と前記メッセージに関連付られたシーケンス番号とで前記メッセージを固有に識別し、前記メッセージイベントは、前記関連接続ストレージシステム内の複数のイベントストアの少なくとも２つに記憶された最終メッセージへのポインタをさらに含む、ステップと、
前記メッセージイベントを複数のイベントストアと複数のスレーブブローカコンピュータシステムへ配信するステップであって、各イベントストアは関連接続ストレージシステムにメッセージイベントを記憶し、各スレーブブローカコンピュータシステムは、関連メモリに前記メッセージイベントを保持する、ステップと、
少なくとも２つのイベントストアから安定通知を受信するステップであって、各安定通知は、前記メッセージイベントがそれぞれのイベントストアに記憶されたことを示す、ステップと、
前記安定通知の受信に対応して、前記メッセージイベントを関連持続ストレージに記憶し、前記クライアントプロデューサへ通知を送信するステップと、
前記メッセージイベントが安定化したことを示す別のメッセージイベントを生成するステップと、
前記別のメッセージイベントを前記複数のイベントストアと複数のスレーブブローカコンピュータシステムとへ配信するステップであって、前記別のメッセージイベントは、各スレーブブローカコンピュータシステムに、前記メッセージイベントをその関連メモリからそれぞれの持続ストレージシステムへ送信させる、ステップとを含む、コンピュータプログラム。
【請求項１６】
前記１つまたは複数のコンピュータ装置の少なくとも１つに実行されたときに、前記１つまたは複数のコンピュータ装置の少なくとも１つに、各メッセージングブローカコンピュータシステムのブローカコンピュータシステム状態を記憶させるステップを実行させるコンピュータ可読命令をさらに含み、
ブローカコンピュータシステム状態は、前記ブローカコンピュータシステムで持続したメッセージイベントストリームを表す、請求項１５に記載のコンピュータプログラム。
【請求項１７】
前記１つまたは複数のコンピュータ装置の少なくとも１つに実行されたときに、前記１つまたは複数のコンピュータ装置の少なくとも１つに、前記マスタブローカコンピュータシステムからメッセージイベントを受信すると、各メッセージングブローカコンピュータシステムのブローカコンピュータシステム状態を更新させるステップを実行させるコンピュータ可読命令をさらに含み、
前記ブローカコンピュータシステム状態の更新では、前記持続ストレージからメッセージイベントを削除することと、前記メッセージイベントを前記マスタブローカコンピュータシステムから受信したメッセージイベントで上書きすることとのうちの少なくとも１つを行う、請求項１６に記載のコンピュータプログラム。
【請求項１８】
前記１つまたは複数のコンピュータ装置の少なくとも１つに実行されたときに、前記１つまたは複数のコンピュータ装置の少なくとも１つに、前記メッセージイベントが安定化すると、前記メッセージイベントを前記マスタブローカコンピュータシステムの内部メモリから削除させるステップを実行させるコンピュータ可読命令をさらに含む、請求項１５に記載のコンピュータプログラム。
【請求項１９】
各スレーブブローカシステムは、前記マスタブローカコンピュータシステムからの別のメッセージイベントと前記マスタブローカコンピュータシステムからの安定メッセージイベントとのうちの少なくとも１つを受信すると、前記メッセージイベントをスレーブブローカコンピュータシステムの内部メモリから削除するよう構成され、
前記安定メッセージイベントは、前記マスタブローカコンピュータシステムでの最終既知安定メッセージイベントに関連付けられた情報を含む、請求項１５に記載のコンピュータプログラム。
【請求項２０】
前記別のメッセージイベントは、メッセージイベントと、最終安定メッセージイベントに関連付けられたシーケンス番号と、前記最終安定メッセージイベントを送信した前記マスタブローカコンピュータシステムに関連付けられたエポック値と、前記メッセージイベントに関連付けられたシーケンス番号と、前記マスタブローカコンピュータシステムに関連付けられたエポック値とを含む、請求項１５に記載のコンピュータプログラム。
【請求項２１】
マスタブローカコンピュータシステムは、前記メッセージイベントを、前記複数のスレーブブローカコンピュータシステムおよび前記複数のイベントストアへ並列に配信する、請求項１５に記載のコンピュータプログラム。
【請求項２２】
請求項１５〜２１のいずれか一項に記載のコンピュータプログラムを記憶した１つまたは複数のコンピュータ可読媒体。
【発明の詳細な説明】
【関連出願の相互参照】
【０００１】
本願は、２０１４年１２月１日に出願された米国仮特許出願第６２／０８６，１１１号および２０１５年１１月３０日に出願された米国特許出願第１４／９５４，７３１号の利益を主張するものであり、これらの出願の開示全体を、ここに参照のために取込む。
【技術分野】
【０００２】
本明細書に記載の発明は、概して、メッセージブローカコンピュータシステムに関し、特に、並列持続性を有するマスタ／スレーブメッセージブローカコンピュータシステムに関する。
【背景技術】
【０００３】
メッセージ速度および信頼性は、メッセージングアプリケーションの非常に重要な性能要件である。例えば、金融市場は、速度が勝負であり、最大手金融サービス会社や投資ファンドにとっては、高速取引能力が、性能の差別化要因となっている。このような会社やファンドの世界規模の業務を結び付ける、効率的で、ハイスループット、低遅延、およびより安全な方法が求められている。既存の解決策は、概して、共有データベース／ファイルシステムを要するマスタ／スレーブブローカアーキテクチャを利用するものである。しかし、共有データベース／ファイルシステムは、理想とは程遠い。なぜなら、もし共有データベース／ファイルシステムに障害が発生すると、システム全体がダウンしデータ（例：委託注文）が失われる可能性があるように、共有データベース／ファイルシステムが単一障害点となるからである。
【図面の簡単な説明】
【０００４】
【図１】一実施形態に係る、メッセージブローカシステムの実施に適したネットワーク化コンピューティング環境を示すハイレベルブロック図である。
【図２】一実施形態に係る、ブローカ内のモジュールの詳細を示すハイレベルブロック図である。
【図３】一実施形態に係る、障害が発生したマスタブローカの場合の最終安定メッセージイベントの判定における不確実性を示すタイムチャートである。
【図４Ａ】一実施形態に係る、メッセージブローカシステムを用いてメッセージを処理する方法の相互作用図である。
【図４Ｂ】一実施形態に係る、メッセージブローカシステムを用いてメッセージを処理する方法の相互作用図である。
【図４Ｃ】一実施形態に係る、メッセージブローカシステムを用いてメッセージを処理する方法の相互作用図である。
【図５】一実施形態に係る、スレーブブローカからマスタブローカへ遷移する方法を示すフローチャートである。
【図６Ａ−１】一実施形態に係る、メッセージを処理するためのメッセージブローカシステムのレプリケーションストリームおよびレプリケーションイベントストアコンポーネントのクラス図である。
【図６Ａ−２】一実施形態に係る、メッセージを処理するためのメッセージブローカシステムのレプリケーションストリームおよびレプリケーションイベントストアコンポーネントのクラス図である。
【図６Ａ−３】一実施形態に係る、メッセージを処理するためのメッセージブローカシステムのレプリケーションストリームおよびレプリケーションイベントストアコンポーネントのクラス図である。
【図６Ｂ−１】一実施形態に係る、メッセージを処理するためのメッセージブローカシステムの長期ストレージコンポーネントのクラス図である。
【図６Ｂ−２】一実施形態に係る、メッセージを処理するためのメッセージブローカシステムの長期ストレージコンポーネントのクラス図である。
【図６Ｂ−３】一実施形態に係る、メッセージを処理するためのメッセージブローカシステムの長期ストレージコンポーネントのクラス図である。
【図６Ｂ−４】一実施形態に係る、メッセージを処理するためのメッセージブローカシステムの長期ストレージコンポーネントのクラス図である。
【図６Ｃ】一実施形態に係る、メッセージを処理するためのメッセージブローカシステムのイベントストアとメッセージブローカとの間のインタフェースである。
【図７】一実施形態に係る、図１に示すネットワーク化環境での使用に適したコンピューティングシステムの構成要素のハイレベルブロック図である。
【発明の詳細な説明】
【０００５】
共用なし（ｓｈａｒｅｄ−ｎｏｔｈｉｎｇ）アーキテクチャを用いるマスタ／スレーブメッセージブローカコンピュータシステムとして構成されるメッセージブローカコンピュータシステムは、高信頼性と共に低遅延メッセージングを提供する。メッセージブローカコンピュータシステムは、少なくとも３つのブローカを含み、そのうちの１つがマスタブローカとして構成され、その他のブローカがスレーブブローカとして構成される。メッセージブローカシステムは、複数のイベントストアを含む。クライアントプロデューサコンピュータシステムは、処理用メッセージを、マスタブローカへ送信する。マスタブローカは、該メッセージの受信に応じてメッセージイベントを生成し、メッセージイベントを、スレーブブローカおよびイベントストアへ並列に配信する。各イベントストアは、メッセージイベントを持続（ｐｅｒｓｉｓｔｅｎｔ）ストレージに記憶し、メッセージイベントが持続したことをマスタブローカに通知する。メッセージイベントが定足数のイベントストアで持続したことから、マスタブローカは、メッセージが安定化したとみなし、マスタがスレーブブローカから確認を得る必要はない。定足数のイベントストアとは、少なくとも２つのイベントストアである。いくつかの実施形態において、定足数は、イベントストアの過半数であってもよい。スレーブブローカがメッセージングイベントを持続した後、該スレーブブローカは別々にイベントストアに通知する。メッセージングイベントが安定化するまでマスタブローカが動作を行わないことから、フェイルオーバーの際には、新マスタブローカが、データの損失なしに旧マスタのブローカ状態を復元することができる。
【０００６】
フェイルオーバーの際（例えば、マスタブローカが動作を終了した場合や整備のために停止された場合）、スレーブブローカは、スレーブブローカの中から新マスタブローカを選択するように構成される。新たに選択されたマスタブローカは、イベントストアから任意の安定化メッセージイベントを回復できる。新たに選択されたマスタブローカは、自身が記録を有しないイベントストアからメッセージイベントを取り出し、メッセージイベントストリームを用いて最大連続（ｍａｘｉｍｕｍ  ｃｏｎｔｉｇｕｏｕｓ）メッセージイベント（ＭＣＭ）を識別する。ＭＣＭに基づいて、新マスタブローカは、ＭＣＭを用いて同期点を識別する。同期点とは、ＭＣＭに関連付けられたメタデータにおけるバックポインタが指し示すシーケンス番号である。そして、新マスタブローカは、同期点よりも上のシーケンス番号のメッセージイベントを再発行し、ＭＣＭに対応するようにメッセージブローカにおけるブローカ状態を更新する。異なるスレーブブローカは異なる時間にメッセージイベントを受信することから、スレーブブローカは異なるブローカ状態を有し得る（理想的には、ブローカ状態は同一であり、マスタブローカのブローカ状態を反映するものである）。再発行されたメッセージイベントは、新マスタブローカの存在を示すメタデータを含む。スレーブブローカは、同期点よりも後の同期番号を持つ旧マスタブローカからのメッセージイベントを廃棄するように構成される。よって、新マスタブローカは、安定化データを損失することなく、障害前の旧マスタブローカのブローカ状態を完全に回復できる。
【０００７】
図面および以下の説明は、ほんの一例として、メッセージブローカシステムがコンピュータネットワークに適用される実施形態を示す。当業者であれば、以下の説明から、メッセージブローカシステムが、相関する要素の他のコンピュータベース表現にも適用可能であること、および、本明細書に示す構造および方法の別の実施形態を明細書に記載の原理を逸脱することなく採用可能であることを、容易に認識できるであろう。以下、複数の実施形態を参照するが、これらの例は添付の図面中に図示する。なお、図面においては、可能な限り同様または同種の参照符号を使用し、同様または同種の機能を示すものとする。
【０００８】
図１は、メッセージブローカリングコンピュータシステム１００を促進する環境の実施形態を示すブロック図である。該環境は、それぞれがネットワーク１１０でマスタブローカ１４０Ａに結合されている、プロデューサクライアント１１０と、コンシューマクライアント１２０と、イベントストア１３０Ａ、１３０Ｂ、および１３０Ｃと、スレーブブローカ１４０Ｂおよび１４０Ｃとを含む。ここではプロデューサクライアント１１０およびコンシューマクライアント１２０が各１つだけ図示されているが、実際にはこれらのエンティティはそれぞれ数多くの、典型的には何千以上もの事例があり、それらの間でのメッセージ配信のための高速・高信頼メカニズムを必要とする。また、２つのスレーブブローカおよび３つのイベントストアのみが図示されているが、いくつかの実施形態では、さらなるスレーブブローカおよび／またはイベントストアが含まれる。当業者には分かるように、本明細書に記載のシステムおよび方法は、本質的および必然的に、電気符号化信号上で動作する物理的有形コンピュータシステムを用いて実行されるものであり、いかなる場合でも、本明細書に記載の方法および動作が人間（または人間集団）によってまたは心理的ステップによって実行されることはない。よって、「マスタブローカ」、「スレーブブローカ」、「メッセージブローカ」、「クライアント」、および「メッセージストア」は、人間や心理的プロセスではなく、物理的コンピュータシステムを指すものとして理解されたい。
【０００９】
ネットワーク１０５は、プロデューサクライアント１１０と、コンシューマクライアント１２０と、イベントストア１３０Ａ、１３０Ｂ、および１３０Ｃと、スレーブブローカ１４０Ｂおよび１４０Ｃと、マスタブローカ１４０Ａとの間の通信基盤を提供する。ネットワーク１０５は、典型的にインターネットであるが、ローカルエリアネットワーク（ＬＡＮ）、メトロポリタンエリアネットワーク（ＭＡＮ）、広域ネットワーク（ＷＡＮ）、移動有線または無線ネットワーク、プライベートネットワーク、または仮想プライベートネットワークを非限定的に含む任意のネットワークであってもよい。
【００１０】
プロデューサクライアント１１０は、マスタブローカ１４０Ａへメッセージを通信する、クライアントアプリケーション等のコンピュータプログラムモジュールを実行するコンピューティング装置である。メッセージは、デジタルデータである。メッセージは、例えば、委託注文や、銀行取引や、温度読み取りや、メッセージブローカリングシステム１００によってレプリケートおよび持続され得るその他のデータや、それらの組み合わせであってもよい。プロデューサクライアント１１０は、例えば、エンタープライズ級サーバで動作するマスタブローカ１４０Ａに結合されたデスクトップコンピュータで動作するカスタムアプリケーションであってもよい。他の実施形態において、プロデューサクライアント１１０は、エンタープライズのウェブサーバであって、パーソナルコンピュータやスマートフォン等でブラウザアプリケーションを用いて該ウェブサーバにアクセスするユーザから受信した命令に応じてメッセージを生成する。いくつかの実施形態において、プロデューサクライアント１１０は、ウルトラメッセージングキューイングアプリケーションおよび／またはＪＡＶＡメッセージングサービスアプリケーションであってもよい。プロデューサクライアント１１０は、マスタブローカ１４０Ａにメッセージ（例：株の売り注文）を提供する。いくつかの実施形態において、プロデューサクライアント１１０は、Ａｐａｃｈｅソフトウェア財団（Ａｐａｃｈｅ  Ｓｏｆｔｗａｒｅ  ＦｏｕｎｄａｔｉｏｎTM）から入手可能なＡｄｖａｎｃｅｄ  Ｍｅｓｓａｇｅ  Ｑｕｅｕｉｎｇ  Ｐｒｏｔｏｃｏｌ（ＡＭＱＰ）および／またはＯＰＥＮＷＩＲＥプロトコルを利用して、マスタブローカ１４０Ａと通信してもよい。
【００１１】
コンシューマクライアント１２０は、マスタブローカ１４０Ａへメッセージを通信する、クライアントアプリケーション等のコンピュータプログラムモジュールを実行するコンピューティング装置である。いくつかの実施形態において、コンシューマクライアント１２０は、マスタブローカ１４０Ａから受信したメッセージを処理するエンタープライズにおけるバックエンドサーバである。いくつかの実施形態において、コンシューマクライアント１２０は、レギュレータや、レギュレータへメッセージを送信するコンピューティング装置に、関連付けられてもよい。いくつかの実施形態において、コンシューマクライアント１２０は、ウルトラメッセージングレシーバアプリケーションおよび／またはＪＡＶＡコンシューマアプリケーションであってもよい。いくつかの実施形態において、コンシューマクライアント１２０は、ＡＭＱＰおよび／またはＯＰＥＮＷＩＲＥプロトコルを利用して、マスタブローカ１４０Ａと通信してもよい。ＡＭＱＰやＯＰＥＮＷＩＲＥプロトコル等によりマスタブローカコンピュータシステムと相互動作するように構成されることから、クライアント１１０、１２０の動作および機能は、汎用コンピュータシステムの基本的な汎用機能を超えるものである。
【００１２】
イベントストア１３０Ａ、１３０Ｂ、１３０Ｃは、それぞれ、１つ以上の非一時的コンピュータ可読媒体を備え、マスタブローカ１４０Ａから受信したメッセージイベントを記憶するように構成されるデータストアである。イベントストア１３０Ａ、１３０Ｂ、１３０Ｃがメッセージイベントを記憶（「持続」とも言う）すると、イベントストア１３０Ａ、１３０Ｂ、１３０Ｃは、安定通知を用いて、メッセージイベントの持続に成功したことを、マスタブローカ１４０Ａに通知する。
【００１３】
ブローカがスレーブブローカからマスタブローカに遷移する実施形態において、イベントストア１３０Ａ、１３０Ｂ、１３０Ｃはまた、新たに選択されたマスタブローカへ同期情報を提供する。同期情報は、メッセージのシーケンス情報を含み、これは、複数のイベントストア１３０Ａ、１３０Ｂ、１３０Ｃのそれぞれで持続したメッセージイベントの最高シーケンス番号を含む。イベントストア１３０Ａ、１３０Ｂ、１３０Ｃはまた、１つ以上の記憶されているメッセージイベントを、新たに選択されたマスタブローカに提供してもよい。
【００１４】
ブローカ１４０Ａ、１４０Ｂ、１４０Ｃは、１つのマスタブローカと、その他のスレーブブローカとを含む。本例において、ブローカ１４０Ａがマスタブローカであり、ブローカ１４０Ｂおよび１４０Ｃがスレーブブローカである。但し、どのブローカも、マスタブローカまたはスレーブブローカとして機能することができる。また、マスタブローカ１４０Ａに障害が発生した場合、残りのスレーブブローカ１４０Ｂ、１４０Ｃのうちの１つが、スレーブブローカによって新マスタブローカとして選択される。マスタ選択プロセスの詳細については、図４を参照して後述する。本明細書に記載の動作および機能によって構成されることから、ブローカ１４０は、汎用コンピュータシステムの基本的な汎用機能を超える特徴および機能を提供する。例えば、従来の汎用コンピュータシステムは、その命令セット、オペレーティングシステムソフトウェア、ユーティリティソフトウェア、または他のアプリケーションの一部として、既存マスタブローカのフェイルオーバーの際に複数のスレーブブローカから新マスタブローカを選択する機能を提供しない。
【００１５】
ブローカ１４０Ａ、１４０Ｂ、および１４０Ｃはそれぞれ、持続ストレージ１４２Ａ、１４２Ｂ、および１４２Ｃを含む。持続ストレージ１４２Ａ、１４２Ｂ、１４２Ｃは、１つ以上の非一時的コンピュータ可読媒体を備え、メッセージイベントを記憶するように構成される。持続ストレージ１４２Ａ、１４２Ｂ、１４２Ｃに記憶されるデータは、関連ブローカ１４０のブローカ状態を表す情報を含む。例えば、持続ストレージ１４２はマスタブローカ１４０Ａのブローカ状態を表す情報を含み、持続ストレージ１４２Ｂはスレーブブローカ１４２Ｂのブローカ状態を表す情報を含む、等である。ブローカ状態は、そのブローカで持続したメッセージイベントストリームを表し、実質上、各メッセージイベントの実状態（ｎｅｔ  ｓｔａｔｅ）を表す。
【００１６】
前述の通り、マスタブローカ１４０Ａは、メッセージイベントを生成する。メッセージイベントは、多くの異なる種類（例：エンキュー、割り当て、コンシューム、トランザクションイベント、送信先キューの生成や削除等の管理イベント等）のうちの１つであってもよい。マスタブローカ１４０Ａは、クライアントプロデューサ１１０、コンシューマプロデューサ１２０からのメッセージや、特定のメッセージイベントについてのイベントストア１３０Ａ、１３０Ｂ、１３０Ｃのうちの少なくとも２つからの安定通知等の受信に応じて、メッセージイベントを生成してもよい。マスタブローカ１４０Ａは、生成したメッセージイベントを、スレーブブローカ１４０Ｂ、１４０Ｃおよびイベントストア１３０Ａ、１３０Ｂ、１３０Ｃへ配信する。
【００１７】
メッセージイベント（レプリケーションイベントとも称する）は、マスタブローカ１４０Ａによって付加された追加メタデータを伴う、プロデューサクライアント１１０から受信したメッセージである。メタデータは、最終安定シーケンス番号、最終安定エポック、およびシーケンス番号のデータフィールドを含む。エポックおよびシーケンス番号フィールドは、固有のメッセージイベント識別子を表す。エポックは、新マスタブローカが選択される度にインクリメントされ、シーケンス番号は、該マスタによって新メッセージイベントが発行される度にインクリメントされる（そして、エポック変更時に０にリセットされる）。「最終安定」フィールドは、マスタブローカが「新」メッセージイベントを送信している時にマスタブローカに既知の最終安定メッセージイベントを示す。例えば、（エポック０、シーケンス番号１７）のメッセージイベントが、プロデューサクライアント１１０がブローカにおけるキューに持続メッセージを追加しようとしていることを示すためにマスタブローカ１４０Ａによって発行されているエンキューメッセージイベントであるとする。このメッセージイベントをイベントストア１３０Ａ、１３０Ｂ、１３０Ｃおよびスレーブブローカ１４０Ｂ、１４０Ｃへ配信した直後、マスタブローカ１４０Ａは、このメッセージイベントがどこかで安定しているかを示す情報を有しない。しかし、イベントストア１３０Ａ、１３０Ｂ、１３０Ｃが安定通知をマスタブローカ１４０Ａへ返信すると、ブローカ１４０Ａは、（エポック０、シーケンス番号１７）のメッセージイベントがイベントストア１３０Ａ、１３０Ｂ、１３０Ｃのうちの１つ以上で安定している（ディスク内にある）ことを示す情報を記憶する。次のメッセージイベント（エポック０、シーケンス番号１８）を発行する際、マスタブローカ１４０Ａは、エポック０、シーケンス番号１７までの（およびエポック０、シーケンス番号１７を含む）先行イベントが現在安定していることを示すために、次のメッセージイベントにおいて最終安定エポックおよび最終安定シーケンス番号をそれぞれ０および１７に設定する。
【００１８】
マスタブローカ１４０Ａは、メッセージングシステムにおいて、メッセージイベントのメタデータを処理しそのようなメタデータに応じて選択的に動作するように構成される唯一のエンティティである。これによって、各エンティティがメッセージメタデータにしたがって選択的に動作する処理ロジックで構成されるメッセージングシステムで発生し得る状態の数が簡素化および削減される。一実施形態において、マスタブローカ１４０Ａによる全ての決定は、少なくとも２つの異なるイベントストア１３０Ａ、１３０Ｂ、１３０Ｃがイベントが安定化したことを示すのを待って、なされる。少なくとも２つの異なるメッセージストア１３０Ａ、１３０Ｂ、１３０Ｃがメッセージイベントが安定化したことを示すと、マスタブローカ１４０Ａは、メッセージイベントに対して外部動作（ｅｘｔｅｒｎａｌ  ａｃｔｉｏｎ）を行い、持続ストレージ１４２Ａにおいてそのブローカ状態を更新するように構成される。加えて、マスタブローカ１４０Ａは、スレーブブローカ１４０Ｂ、１４０Ｃおよびイベントストア１３０Ａ、１３０Ｂ、１３０Ｃへ、安定化した最終メッセージングイベントのシーケンス番号およびエポック番号を識別する安定イベントを周期的に送出することによって、マスタブローカ１４０Ａが安定化したと決定した最終メッセージングイベントを表す情報を配信する。一定活動状態において、マスタブローカ１４０Ａは、周期的安定イベントを送出する必要はない。なぜなら、該情報は、各送出メッセージイベントの一部として含まれるからである。よって、スレーブブローカ１４０Ｂ、１４０Ｃは、メモリに保持されたメッセージイベントを安全にそれらのディスク持続層（すなわち、持続ストレージ）に適用でき、スレーブブローカは、フェイルオーバープロセスにおいてマスタになる際にこの情報を利用してクリーンカットオーバー点を識別してもよい。
【００１９】
マスタブローカ１４０Ａおよびスレーブブローカ１４０Ｂ、１４０Ｃはそれぞれ、ブローカ状態を維持する。前述の通り、ブローカ状態は、そのブローカで持続したメッセージイベントストリームを表し、実質上、各メッセージイベントの実状態を表す。例えば、特定のメッセージについて、エンキューメッセージイベント、それに続く割り当てメッセージイベント、およびそれに続くコンシュームメッセージイベントの結果、該メッセージのブローカ状態は完全に空（ｅｍｐｔｙ）となるかもしれない。一方、別のメッセージについて、ブローカ状態が、エンキューイベントが該別のメッセージに関連付けられた現状態を示すように、エンキューメッセージイベントのみが生成されるかもしれない。
【００２０】
図２は、図１に示すブローカ１４０Ａ、１４０Ｂ、および１４０Ｃ（本項では「ブローカ１４０」と称する）内のモジュールの詳細を示すハイレベルブロック図である。ブローカ１４０のいくつかの実施形態は、本明細書に記載のものと異なるモジュールを含む。同様に、機能を、本明細書に記載のものと異なる形でモジュール間に分散することもできる。ブローカ１４０は、持続ストレージ１４２、持続モジュール２２０、マスタ選択モジュール２３０、および回復モジュール２４０を含むモジュールから成る。
【００２１】
持続ストレージ１４２は、１つ以上の非一時的コンピュータ可読媒体を含み、持続メッセージイベントにおいてブローカ１４０に使用されるデータを記憶するように構成される。持続ストレージ１４２に記憶されるデータは、ブローカ状態を表す情報を含む。持続ストレージ１４２の付加的な機能は、ブローカ状態に基づいてメッセージングイベントを記憶し、周期的にメッセージングイベントのストリームをその時点のスナップショットを表す状態へとロールアップしてから該スナップショットを持続ストレージに記憶し、新メッセージングイベントを適用する前にメッセージングイベントのスナップショットを取り出し、スナップショットからのレプリケーションイベントまたはメモリに記憶したイベントを適用する機能や他の機能を含む。
【００２２】
持続モジュール２２０は、マスタブローカ１４０Ａまたはスレーブブローカ１４０Ｂ、１４０Ｃとして動作中のブローカ１４０の動作を制御する。一実施形態において、持続モジュール２２０は、マスタブローカの機能を行うことができる。マスタブローカの機能は、メッセージイベントを追加、割り当て、またはコンシュームする等のトランザクションイベントの生成や、送信先イベントの追加または削除を含む。メッセージイベントが生成されると、マスタブローカ持続モジュール２２０は、レプリケーションイベントメッセージを、スレーブブローカおよびイベントストアへ並列に送信する。レプリケーションイベントメッセージが送出されると、持続モジュール２２０は、イベントストアからの安定通知を待つ。安定通知は、スレーブブローカまたはイベントストアからの、メッセージイベントがそのストレージで持続したことの保証である。定足数、すなわち所定数のイベントストア（例：２つのイベントストア）から安定通知を受信すると、持続モジュール２２０は、メッセージイベントが持続したと決定し、その旨をメッセージイベントのプロデューサクライアント１１０に通信する。定足数となる数は設定可能であり、３、４、または他の任意のイベントストア数に設定することができる。
【００２３】
マスタブローカの持続モジュール２２０が生成する全てのメッセージイベントについて、持続モジュール２２０は、メッセージイベントのメタデータに、先行安定化メッセージイベントに関連付けられた情報を適用する。加えて、マスタブローカの持続モジュール２２０は、最終安定メッセージイベントに関連付けられた情報を含む安定メッセージイベントを周期的に生成する。
【００２４】
持続モジュール２２０はさらに、メッセージイベントをコンシューマクライアント１２０へ送信し、コンシューマクライアント１２０からのメッセージをコンシュームした旨の確認を待つ。そして、持続モジュール２２０は、削除メッセージイベントを生成し、スレーブブローカおよびイベントストアへ配信する。削除メッセージイベントの安定通知を受信すると、マスタブローカの持続モジュール２２０は、マスタブローカ１４０Ａの内部メモリからメッセージイベントを削除する。
【００２５】
一実施形態において、持続モジュール２２０は、スレーブブローカの機能を行うことができる。マスタブローカからメッセージイベントを受信すると、スレーブブローカ１４０Ｂまたは１４０Ｃの持続モジュール２２０は、そのメッセージイベントを内部メモリに保持する。受信したメッセージイベントは、マスタブローカに既知の最終安定イベントに関連付けられた情報を含むメタデータを含む。持続モジュール２２０は、メタデータに含まれる情報を抽出し、最終安定メッセージイベント番号を指し示すバックポインタを取り出す。スレーブブローカの持続モジュール２２０は、現メッセージイベントストリームのスナップショットとも称される現メッセージイベントを伴うバックポインタを持続ストレージ１４２に適用する。
【００２６】
スレーブブローカが中断したりスレーブブローカを再起動したりしなければならない場合、スレーブブローカは、他のブローカよりも進むかまたは遅れる可能性があり、不整合状態となる。スレーブブローカの持続モジュール２２０は、レプリケーションストリームプロトコルを介してスレーブブローカが復帰する際にブローカ状態の整合性の実現を助ける。例えば、スレーブブローカが他のブローカやイベントストアの前にレプリケーションメッセージイベントの一部のみを受信した場合、マスタブローカからメッセージのスナップショットに関連する追加情報を受信するまで、メッセージイベントは適用されない。もしスレーブブローカが短時間停止すると、スレーブブローカでのメッセージイベントストリームは、マスタブローカによって配信されるレプリケーションメッセージイベントストリームとほぼ同期する。持続モジュール２２０は、失われたメッセージイベントをイベントストアのうちの１つから回復することができ、スレーブブローカが現行レプリケーションメッセージイベントストリームと整合することになる。スレーブブローカが長時間停止すると、スレーブブローカは現レプリケーションメッセージイベントストリームからかなり遅れを取ることになり、回復モジュール２４０を用いてスレーブオンボーディングプロセス（ｓｌａｖｅ  ｏｎｂｏａｒｄｉｎｇ  ｐｒｏｃｅｓｓ）によりスレーブの状態を回復する。
【００２７】
回復モジュール２４０は、マスタブローカのフェイルオーバーの場合に前マスタブローカのブローカ状態を回復することができ、スレーブブローカのフェイルオーバーまたは再起動の場合にスレーブブローカのブローカ状態を回復することができる。マスタブローカのフェイルオーバーの場合、マスタ選択モジュール２３０（詳細は後述する）は、スレーブブローカのうちの１つを新マスタとして選択する。新マスタブローカが選択されると、回復モジュール２４０は、スレーブブローカ状態の前マスタのブローカ状態への遷移を助ける。回復モジュール２４０は、レプリケーションストリームカットオーバー点、すなわち、マスタブローカが安定的と表示した最終イベントであって、マスタブローカがレプリケーションストリームにおける該決定メッセージイベントに対して定足数の安定通知を受信した最終イベントを定義するレプリケーションストリームからのシーケンス番号を決定する。
【００２８】
マスタブローカに障害が発生すると、マスタブローカの再起動または修理が必要となる。この場合、マスタブローカから最終安定メッセージイベントを取り出すのは、簡便ではなく、時間がかかる。レプリケーションストリームプロトコルに基づいて、マスタブローカは、各メッセージイベントで最終安定メッセージイベントに関連付けられた情報を生成する。マスタブローカの障害時に、メッセージイベントはインフライト（ｉｎ  ｆｌｉｇｈｔ）であるかもしれない。インフライトメッセージイベントに基づいて、最終安定メッセージイベントを決定する実施形態を以下に述べる。
【００２９】
図３は、一実施形態に係る、障害が発生したマスタブローカの場合に最終安定メッセージイベントを決定する不確実性を示すタイムチャートである。図３の例示的実施形態のケース１において、イベントストアＵＭＰ３は、全てのメッセージがインフライトである唯一のイベントストアである。もしマスタブローカおよびイベントストアＵＭＰ３に同時に障害が発生すると、ｍｓが最終安定メッセージ３１０であることを決定することはできない。上記の場合、最終良好点３１５は、ｍｘである。
【００３０】
例示的実施形態のケース２において、イベントストアＵＭＰ２のいくつかのメッセージはインフライトであり、その最終メッセージであるメッセージｍｋは、最終安定メッセージ３１０ｍｓを指し示す。イベントストアＵＭＰ３は、全てのメッセージがインフライトである。もしマスタブローカおよびイベントストアＵＭＰ３に同時に障害が発生すると、メッセージｍｋがイベントストアＵＭＰデーモンの中で最新の使用可能なメッセージであり、最終安定メッセージｍｓを指し示す。メッセージ［ｍｓ＋１，ｍｋ］のステータスは、未知である。最終良好点は、ｍｓである。
【００３１】
前述の例示的実施形態から、最終安定メッセージの決定には不確実性がある。既知の良好点の後のメッセージイベントは、安定化しているかもしれず、していないかもしれない。メッセージイベントのステータスの不確実性を克服するために、ギャップがある場合、すなわち、どのイベントストアも特定のメッセージイベントを有しない場合、既知の良好点の後に安定化しているまたはしていないメッセージイベントの範囲は、既知の良好点の次のメッセージイベントからギャップ前の最終メッセージまでである。
【００３２】
このように、メッセージイベントストリームの回復のために、シーケンス番号ギャップに遭遇する前に観測される最高シーケンス番号メッセージである、最大連続メッセージ（ＭＣＭ）が観測される。さらに、同期点が、ＭＣＭのバックポインタとして決定される。同期点は、ストリームカットオーバー点である。新マスタは、同期点からＭＣＭまでの全てのメッセージイベントを、選択されたマスタブローカのために決定された新エポック番号と共に、再発行する。さらに、新マスタは、持続ストレージ上のそのスナップショットをＭＣＭまで更新して、ＭＣＭと整合するようにそのブローカメモリ状態を復元する。ブローカ状態が回復すると、マスタブローカは、メッセージイベントの生成を開始し、マスタとしての役割を再開することができる。
【００３３】
他の実施形態において、回復モジュール２４０は、スレーブブローカのフェイルオーバーまたは再起動の場合に、スレーブブローカのブローカ状態を回復する。中断したスレーブブローカは、持続またはブローカ状態を持たない新スレーブブローカのように扱われる。中断していない既存スレーブブローカからのディスクスナップショットは、新たなまたは中断したスレーブブローカへコピーされる。状態を持たない新ブローカは、ライブストリームを受信し、そのディスクスナップショットへの周期的更新を一時的に中断する。既存ブローカは、レプリケーションストリームを受信し続け、また、そのディスクスナップショットへの周期的更新を一時的に中断する。そして、既存ブローカは、新ブローカへのディスクスナップショット全体の送信を試みる。送信が成功すると、両スレーブは、同一ディスクスナップショットを有し、双方とも、メモリからそれぞれの「バッファリングされた」イベントをディスクスナップショットへ適用し始め、最終的にはライブストリームに追いつく。
【００３４】
マスタ選択モジュール２３０は、フェイルオーバーが発生したと判定し、スレーブブローカ１４０Ｂ、１４０Ｃのうちの１つを新マスタブローカとして選択する。いくつかの実施形態において、マスタブローカは、周期的間隔で、ハートビート信号をマスタ選択モジュール２３０へ送信する。例えば、ハートビートは、毎マイクロ秒送信される。周期的間隔は、予め定義されたものであり、設定可能である。マスタ選択モジュール２３０は、所定のタイムアウト間隔の間ハートビート信号がない、例えば、１秒間信号受信がない場合に、マスタブローカの障害を検出する。
【００３５】
マスタ選択モジュール２３０はさらに、マスタブローカとして選択可能な適格スレーブブローカのリストの記録をとる。中断したマスタを検出すると、マスタ選択モジュール２３０は、記録した適格ブローカリストから新マスタを選択する。いくつかの実施形態において、マスタ選択モジュール２３０は、ＲＡＦＴプロトコルを利用して、記録リストから新マスタを選択する。マスタ選択モジュール２３０が新マスタを選択する際、回復モジュール２４０によって一時的ブローカ状態が作り出されて、スレーブブローカが障害が発生したマスタブローカのメッセージイベントを回復するのを助け、障害が発生したマスタブローカのブローカ状態を回復してそれを新たに選択されたマスタブローカへ適用することができる。
【００３６】
図４Ａ〜Ｃは、一実施形態に係る、メッセージブローカシステムを用いてメッセージを処理する方法の相互作用図である。種々の実施形態において、該方法は、図４Ａ〜Ｃに関連して記載されるステップと異なるおよび／または追加のステップを含んでもよい。加えて、いくつかの実施形態において、ステップは、図４Ａ〜Ｃに関連して記載される順と異なる順で行われてもよい。
【００３７】
プロデューサクライアント１１０は、メッセージ４０２をマスタブローカ１４０Ａへ送信する。マスタブローカ１４０Ａは、受信したメッセージに基づいて、エンキューイベントを生成する。生成したエンキューイベントは、最終安定メッセージイベントのシーケンス番号と、最終安定メッセージイベントを送信したマスタブローカ１４０Ａに関連付けられたエポック番号と、エンキューイベントのシーケンス番号（例：シーケンス番号１）と、マスタブローカ１４０Ａに関連付けられたエポック番号とを含むメタデータを含む。マスタブローカ１４０Ａは、エンキューイベントを、スレーブブローカ１４０Ｂ、１４０Ｃおよびメッセージングソース１３０Ａ、１３０Ｂ、および１３０Ｃへ並列に配信する（４０４）。いくつかの実施形態において、エンキューイベントの配信は、直列に行われてもよく、並列と直列との組み合わせで行われてもよい。
【００３８】
マスタブローカ１４０Ａは、メモリにエンキューイベントを保持する（４０６）。同様に、スレーブブローカ１４０Ｂ、１４０Ｃが配信エンキューイベントを受信すると、スレーブブローカ１４０Ｂ、１４０Ｃは、メモリにエンキューイベントを保持する（４０８、４１０）。
【００３９】
イベントストア１３０Ａ、１３０Ｂ、１３０Ｃは、エンキューイベントを受信し、それぞれの永久メモリにエンキューイベントを記憶する（４１２、４１４、４１６）。イベントストアが永久メモリにエンキューイベントを記憶すると、イベントストアは、エンキューイベントが持続した旨の通知４１８をマスタブローカ１４０Ａへ送信する。こうして、メッセージストア１３０Ａ、１３０Ｂ、１３０Ｃがエンキューイベントの持続に成功したか否かによって、マスタブローカ１４０Ａは、０個、１個、数個、または全ての通知４１８を受信し得る。マスタブローカ１４０Ａが少なくとも２つの通知４１８を受信すると、マスタブローカ１４０Ａは、エンキューイベントが安定化したと判定し、その長期ストレージ（すなわち、持続ストレージ１４２）にエンキューイベントを記憶する（４２０）。エンキューイベントが安定化したとの判定に応じて、マスタブローカ１４０Ａは、メッセージが持続した旨の通知４２２をプロデューサクライアント１１０へ送信する。
【００４０】
マスタブローカ１４０Ａは、割り当てイベントを生成する。生成した割り当てイベントは、最終安定メッセージイベント（エンキューイベント）のシーケンス番号と、最終安定メッセージイベントを送信したマスタブローカ（マスタブローカ１４０Ａ）に関連付けられたエポック番号と、割り当てイベントのシーケンス番号（例：シーケンス番号２）と、マスタブローカ１４０Ａに関連付けられたエポック番号とを含むメタデータを含む。マスタブローカ１４０Ａは、割り当てイベントを、スレーブブローカ１４０Ｂ、１４０Ｃおよびメッセージングソース１３０Ａ、１３０Ｂ、および１３０Ｃへ並列に配信する（４２４）。
【００４１】
マスタブローカ１４０Ａは、メモリに割り当てイベントを保持する（４２６）。スレーブブローカ１４０Ｂ、１４０Ｃが配信割り当てイベントを受信すると、スレーブブローカ１４０Ｂ、１４０Ｃは、それぞれのブローカ状態を更新する（４２８、４３０）。具体的に、各スレーブブローカ１４０Ｂ、１４０Ｃは、それぞれのメモリに保持していたエンキューイベントを持続し（例えば、持続ストレージ１４２へ移す）、その後、それぞれのメモリに割り当てイベントを保持する。スレーブブローカ１４０Ｂ、１４０Ｃがエンキューイベントを持続すると、スレーブブローカ１４０Ｂ、１４０Ｃは、持続イベントの確認４３２を全てのイベントストア１３０Ａ、１３０Ｂ、１３０Ｃへ送信する。イベントストア１３０Ａ、１３０Ｂ、１３０Ｃは、確認４３２を記憶する。
【００４２】
イベントストア１３０Ａ、１３０Ｂ、１３０Ｃは、割り当てイベントを受信し、それぞれの永久メモリに割り当てイベントを記憶する（４３４、４３６、４３８）。イベントストアが永久メモリに割り当てイベントを記憶すると、イベントストアは、割り当てイベントが持続した旨の通知４４０をマスタブローカ１４０Ａへ送信する。マスタブローカ１４０Ａが少なくとも２つの通知４４０を受信すると、マスタブローカ１４０Ａは、割り当てイベントが安定化したと判定し、その長期ストレージに割り当てイベントを記憶する（４４２）。他の実施形態において、マスタブローカ１４０Ａは、単に長期ストレージにおけるエンキューイベントを割り当てイベントで上書きしてもよい（４４２）。
【００４３】
割り当てイベントが安定化したとの判定に応じて、マスタブローカ１４０Ａは、メッセージをコンシューマクライアント１２０（例：マスタブローカ１４０Ａから受信した注文を処理しているエンタープライズにおけるバックエンドサーバ）へ送信する（４４４）。コンシューマクライアント１２０は、メッセージ受信の確認４４６を送信する。
【００４４】
マスタブローカ１４０Ａは、コンシュームイベントを生成する。生成したコンシュームイベントは、最終安定メッセージイベント（割り当てイベント）のシーケンス番号（例：シーケンス番号２）と、最終安定メッセージイベントを送信したマスタブローカ（マスタブローカ１４０Ａ）に関連付けられたエポック番号と、割り当てイベントのシーケンス番号（例：シーケンス番号３）と、マスタブローカ１４０Ａに関連付けられたエポック番号とを含むメタデータを含む。マスタブローカ１４０Ａは、コンシュームイベントを、スレーブブローカ１４０Ｂ、１４０Ｃおよびメッセージングソース１３０Ａ、１３０Ｂ、および１３０Ｃへ並列に配信する（４４８）。
【００４５】
マスタブローカ１４０Ａは、メモリにコンシュームイベントを保持する（４５０）。スレーブブローカ１４０Ｂ、１４０Ｃが配信コンシュームイベントを受信すると、スレーブブローカ１４０Ｂ、１４０Ｃは、それぞれのブローカ状態を更新する（４５２、４５４）。具体的に、各スレーブブローカ１４０Ｂ、１４０Ｃは、それぞれのメモリに保持していた割り当てイベントを持続し、その後、それぞれのメモリにコンシュームイベントを保持する。他の実施形態において、スレーブブローカ１４０Ｂ、１４０Ｃは、単に長期ストレージにおけるエンキューイベントを割り当てイベントで上書きしてもよい。スレーブブローカ１４０Ｂ、１４０Ｃが割り当てイベントを持続すると、スレーブブローカ１４０Ｂ、１４０Ｃは、持続イベントの確認４５６を全てのイベントストア１３０Ａ、１３０Ｂ、１３０Ｃへ送信する。イベントストア１３０Ａ、１３０Ｂ、１３０Ｃは、確認３５６を記憶する。
【００４６】
イベントストア１３０Ａ、１３０Ｂ、１３０Ｃは、コンシュームイベントを受信し、それぞれの永久メモリにコンシュームイベントを記憶する（４５８、４６０、４６２）。イベントストアが永久メモリにコンシュームイベントを記憶すると、イベントストアは、コンシュームイベントが持続した旨の通知４６４をマスタブローカ１４０Ａへ送信する。マスタブローカ１４０Ａが少なくとも２つの通知４６４を受信すると、マスタブローカ１４０Ａは、コンシュームイベントが安定化したとみなし、その長期ストレージにコンシュームイベントを記憶する（４６６）。他の実施形態において、マスタブローカ１４０Ａは、単にメモリからコンシュームイベントを消去し、長期ストレージからエンキューイベントおよび／または割り当てイベントを削除してもよい（４６６）。
【００４７】
処理フローのこの時点で、マスタは安定化コンシュームメッセージイベントを削除しているが、スレーブブローカ１４０Ｂ、１４０Ｃはまだコンシュームメッセージイベントをメモリに保持している。高活動期間において、マスタブローカ１４０Ａによって生成されスレーブブローカ１４０Ｂ、１４０Ｃへ配信される次のメッセージイベントによって、それぞれのブローカ状態が更新される。しかし、メッセージイベント間に遅延があると、マスタブローカ１４０Ａは、安定イベントを生成して、スレーブブローカ１４０Ｂ、１４０Ｃおよびイベントストア１３０Ａ、１３０Ｂ、１３０Ｃへ配信し得る（４６８）。
【００４８】
安定メッセージは、最終安定メッセージイベント（コンシュームイベント）のシーケンス番号（例：シーケンス番号３）と、最終安定メッセージイベントを送信したマスタブローカ（マスタブローカ１４０Ａ）に関連付けられたエポック番号と、安定イベントのシーケンス番号（例：シーケンス番号４）と、マスタブローカ１４０Ａに関連付けられたエポック番号とを含むメタデータを含む。マスタブローカ１４０Ａは、安定イベントを、スレーブブローカ１４０Ｂ、１４０Ｃおよびメッセージングソース１３０Ａ、１３０Ｂ、および１３０Ｃへ並列に配信する（４６８）。
【００４９】
スレーブブローカ１４０Ｂ、１４０Ｃが配信安定イベントを受信すると、スレーブブローカ１４０Ｂ、１４０Ｃは、それぞれのブローカ状態を更新する。具体的に、各スレーブブローカ１４０Ｂ、１４０Ｃは、それぞれのメモリに保持していたコンシュームイベントを持続する。他の実施形態において、スレーブブローカ１４０Ｂ、１４０Ｃは、単にメモリからコンシュームイベントを消去し、長期ストレージからエンキューイベントおよび割り当てイベントを削除してもよい。スレーブブローカ１４０Ｂ、１４０Ｃはまた、単にエンキューイベントおよび／または割り当てイベントをコンシュームイベントで上書きしてもよい。スレーブブローカ１４０Ｂ、１４０Ｃがコンシュームイベントを持続すると（４７０、４７２）、スレーブブローカ１４０Ｂ、１４０Ｃは、持続イベントの確認４７４を全てのイベントストア１３０Ａ、１３０Ｂ、１３０Ｃへ送信する。イベントストア１３０Ａ、１３０Ｂ、１３０Ｃは、確認４７４を記憶する。
【００５０】
図５は、一実施形態に係る、スレーブブローカからマスタブローカへ遷移する方法を示すフローチャートである。一実施形態において、図５のプロセスが、ブローカ１４０によって行われる。他の実施形態において、他のエンティティが、該プロセスのステップの一部または全部を行ってもよい。同様に、実施形態は、異なるおよび／または追加のステップを含んでもよく、異なる順でステップを行ってもよい。
【００５１】
ブローカ１４０は、スレーブブローカからマスタブローカへのブローカステータスの変化の通知を受信する（５０５）。例えば、先行マスタブローカ１４０Ａに障害が発生し、最後の通信から特定時間経過後、スレーブブローカ１４０Ｂ、１４０Ｃは、それぞれのマスタ選択モジュール２４０を用いて、スレーブブローカのうちの１つ（例：１４０Ｂ）を新マスタブローカ（本項で「ブローカ１４０」と称する）として選択する。エポック番号は、新ブローカ１４０エポックが開始したことを示すためにインクリメントされる。
【００５２】
ブローカ１４０は、基本値を識別する（５１０）。基本値は、メッセージングブローカの持続ストレージにおけるメッセージイベントの最高シーケンス番号である。例えば、シーケンス情報は、｛５０９｝がブローカ１４０の持続ストレージ１４２におけるメッセージのシーケンス番号の最高値であると示し得る。
【００５３】
ブローカ１４０は、複数のイベントストア１３０Ａ、１３０Ｂ、１３０Ｃからシーケンス情報を取り出す（５１５）。シーケンス情報は、複数のイベントストア１３０Ａ、１３０Ｂ、１３０Ｃそれぞれで持続したメッセージイベントの最高シーケンス番号を表す。例えば、最高シーケンス番号は、イベントストア１３０Ａ、１３０Ｂ、および１３０Ｃで、それぞれ｛５１０，５１２，５１４｝の値であってもよい。
【００５４】
ブローカ１４０は、基本値およびシーケンス情報に基づいて取り出すべきメッセージイベントのセットを決定する（５２０）。基本値未満のシーケンス番号のメッセージは、既にブローカ１４０によって追跡されている。基本値がシーケンス情報で表される最高シーケンス番号と等しければ、ブローカ１４０は最新の状態である。しかし、典型的なケースでは、旧マスタブローカ１４０Ａがオフラインになる前に、まだ安定化していないいくつかのメッセージが送出される。したがって、ブローカ１４０のブローカ状態は、旧マスタブローカ１４０Ａのブローカ状態よりもわずかに遅れている可能性がある。種々のメッセージストアからのシーケンス情報を用いることによって、新たに選択されたブローカ１４０は、旧マスタブローカ１４０Ａの状態を回復できる。前述の例では、シーケンス情報は、イベントストア１３０Ａ、１３０Ｂ、および１３０Ｃでそれぞれ｛５１０，５１２，５１４｝の値を含み、基本値は｛５０９｝である。よって、ブローカは、イベントストア１３０Ａ、１３０Ｂ、および１３０Ｃのうちの１つ以上からメッセージイベント｛５１０−５１４｝を取り出すべきであると判定する。なぜなら、このメッセージセットが、シーケンス番号｛５０９｝の基本値メッセージからシーケンス番号｛５１４｝の最高安定化メッセージまでのメッセージセット全体を包含しているからである。例えば、表１は、イベントストア１３０Ａ、１３０Ｂ、および１３０Ｃそれぞれにどのメッセージイベントが記憶されているかを示す。表１におけるセル値は、メッセージイベントに関連付けられたシーケンス番号およびバックポインタを示す。バックポインタは、最終安定化メッセージイベントを指す。例えば、「５０９（５０７）」は、イベントストア１３０Ａ、１３０Ｂ、および１３０Ｃがシーケンス番号５０９に関連付けられたメッセージイベントを記憶した際の最終安定化メッセージイベントに関連付けられた、シーケンス番号｛５０７｝とシーケンス番号｛５０７｝へのバックポインタとを表す。
【表１】
0006602866.tif 000002
【００５５】
ブローカ１４０は、複数のイベントストアのうちの１つ以上からメッセージイベントセットを取り出す（５２５）。いくつかの実施形態において、ブローカ１４０は、１つのメッセージを特定のイベントストアから取り出し、次のメッセージイベントを異なるイベントストアから取り出し、次のメッセージイベントを異なるイベントストアから取り出すというように、メッセージイベントセットをラウンドロビン方式で取り出す。こうして、いずれか１つのストアへの負荷を軽減する。要求メッセージイベントがイベントストアに記憶されているメッセージイベントよりも高いシーケンス番号を有する場合、ブローカ１４０は、メッセージブローカ１３０から該メッセージイベントを要求しない。前述の例では、イベントストア１３０Ａおよび１３０Ｂがそれぞれ｛５１０｝および｛５１１｝までのメッセージイベントしか有していないことから、ブローカ１４０は、イベントストア１３０Ｃのみからメッセージイベント｛５１３｝および｛５１４｝を要求することによって、イベントストア１３０Ａ、１３０Ｂ、および１３０Ｃの間で負荷を分散させる。本例において、取り出したメッセージセットは、シーケンス番号｛５１１−５１４｝のメッセージイベントを含み得る。尚、シーケンス番号５０９に関連付けられたメッセージイベントを要求する必要はない。なぜなら、基本数は５０９であるため、ブローカ１４０のブローカ状態はシーケンス番号５０９に関連付けられたメッセージングイベントに既に更新されているからである。他の場合において、全メッセージイベントを単一のストア（例：メッセージストア１３０Ｃ）から取り出してもよい。
【００５６】
ブローカ１４０は、取り出したメッセージイベントセットに部分的に基づいて、メッセージイベントストリームをアセンブルする（５３０）。ブローカ１４０は、受信セットにおけるメッセージイベントをそれぞれのシーケンス番号で並べることによって、メッセージイベントストリームを生成する。例えば、メッセージイベントストリームとして、｛５１０，５１１，５１２，５１３，５１４｝の順のものが考えられる。メッセージイベントは、シーケンス番号におけるギャップを識別するために並べられる。場合によっては、要求したメッセージセットのうちの１つ以上が欠けていると、複数のメッセージストア１３０Ａ、１３０Ｂ、１３０Ｃから受信したシーケンス番号にギャップがあるかもしれない。例えば、ギャップを含むメッセージイベントストリームとして、メッセージングイベント｛５１１｝が欠けている｛５１０，５１２，５１３，５１４｝が考えられる。、例えば、１つ以上のメッセージストアがマスタブローカ１４０からのメッセージイベント受信に失敗した場合に、ギャップが起こり得る。
【００５７】
ブローカ１４０は、メッセージイベントストリームを用いて、最大連続メッセージイベント（ＭＣＭ）を識別する（５３５）。ＭＣＭは、ブローカ１４０がシーケンス番号におけるギャップに遭遇する前に回復することができる最高シーケンス番号の安定化メッセージイベントである。ギャップがない場合、ＭＣＭは、単に、メッセージイベントストリームにおける最高シーケンス番号の安定化メッセージイベントである。例えば、ギャップがないと想定すると、シーケンス番号｛５１２｝に関連付けられたメッセージイベントが、ＭＣＭである。なぜなら、これが、安定化された（少なくとも２つのイベントストアに記憶された）最高シーケンス番号のメッセージイベントであるからである。あるいは、メッセージイベントストリームがギャップを含む場合、例えば、シーケンス番号｛５１１｝のエントリがない以外は表１に示すものと同じストリームの場合、ＭＣＭは、シーケンス番号｛５１０｝に関連付けられたメッセージイベントである。なぜなら、これが、シーケンス番号においてギャップが起こる前の最高安定化メッセージであるからである。
【００５８】
ブローカ１４０は、ＭＣＭを用いて、同期点を識別する（５４０）。ＭＣＭは、最終安定メッセージへのバックポインタ（すなわち、最終安定メッセージのシーケンス番号）を含むメタデータを含む。メッセージングイベントの同期番号は、ＭＣＭのバックポインタで指し示される。ＭＣＭがシーケンス番号｛５１２｝を有する前述の例では、ブローカ１４０は、最終安定メッセージ（例：シーケンス番号｛５１０｝を有するメッセージイベント）を識別する該メッセージに関連付けられたメタデータ内のバックポインタを取り出す。よって、同期点は、シーケンス番号｛５１０｝である。
【００５９】
ブローカ１４０は、同期点よりも上のシーケンス番号のメッセージイベントを再発行する（５４５）。ブローカ１４０は、新エポック番号および新同期番号を用いて同期点よりも上のシーケンス番号のメッセージイベントを再生成し、再生成したメッセージイベントを全スレーブブローカおよび全イベントストア１３０Ａ、１３０Ｂ、１３０Ｃへ配信することによって、メッセージイベントを再発行する。例えば、同期点がシーケンス番号｛５０３｝のメッセージであると想定すると、ブローカ１４０は、シーケンス番号｛５０４，５０６，５０７｝のメッセージイベントを全イベントストア１３０Ａ、１３０Ｂ、１３０Ｃおよび残りのスレーブブローカ１４０Ｃへ再発行する。スレーブブローカ（例：１４０Ｃ）は、異なるエポック番号を伴う再発行メッセージイベントの受信に応じて、同期点後の全メッセージイベントを破棄し、前マスタブローカからの以後のメッセージを無視する。同時に、ブローカ１４０は、ＭＣＭまでそのブローカ状態を更新する（５５０）。この時点で、全ブローカ１４０Ａ、１４０Ｂ、および１４０Ｃおよび全メッセージストア１３０Ａ、１３０Ｂ、および１３０は、完全に同期する。これは、メッセージの共有中央リポジトリがないにもかかわらず、達成される。
【００６０】
図６Ａは、一実施形態に係る、メッセージを処理するためのメッセージブローカシステムのレプリケーションストリームおよびレプリケーションイベントストアコンポーネントのクラス図である。レプリケーションストリームイベントストアコンポーネントは、ＵＭＰｅｒｓｉｓｔｅｎｃｅＡｄａｐｔｅｒクラス６０５と、ＲｅｐｌｉｃａｔｉｎｇＭｅｓｓａｇｅＳｔｏｒｅクラス６１０と、ＲｅｐｌｉｃａｔｉｏｎＳｔｒｅａｍクラス６１５と、ＲｅｐｌｉｃａｔｉｎｇＴｒａｎｓａｃｔｉｏｎＳｔｏｒｅクラス６２０とを含む。ＵＭＰｅｒｓｉｓｔｅｎｃｅＡｄａｐｔｅｒ６０５は、ＲｅｐｌｉｃａｔｉｎｇＭｅｓｓａｇｅＳｔｏｒｅ６１０およびＲｅｐｌｉｃａｔｉｎｇＴｒａｎｓａｃｔｉｏｎＳｔｏｒｅ６２０を実装して、中央リポジトリなしでマスタ／スレーブメッセージブローカシステムをサポートするためにディスクに書き込まれる持続データメッセージが最初にＵＭＰインタフェースを用いてレプリケートされるようにする。プロデューサまたはコンシューマクライアントがマスタブローカと相互作用してメッセージイベントを送信するため、ＡｃｔｉｖｅＭＱブローカは、ＲｅｐｌｉｃａｔｉｎｇＭｅｓｓａｇｅＳｔｏｒｅのメソッド（すなわち、ａｄｄＭｅｓｓａｇｅ、ｒｅｍｏｖｅＭｅｓｓａｇｅ等）を呼び出す。ＲｅｐｌｉｃａｔｉｏｎＳｔｒｅａｍクラス６１５のメソッドは、ＵＭＰｅｒｓｉｓｔｅｎｃｅＡｄａｐｔｅｒ６０５の全てのＲｅｐｌｉｃａｔｉｎｇＭｅｓｓａｇｅＳｔｏｒｅ６２０によって使用される。例えば、ブローカからの「ａｄｄＭｅｓｓａｇｅ」コマンドは、ＲｅｐｌｉｃａｔｉｎｇＭｅｓｓａｇｅＳｔｏｒｅ６２０においてＡｄｄＭｅｓｓａｇｅＲｅｐｌｉｃａｔｉｏｎＥｖｅｎｔを生成し、イベントは、ＲｅｐｌｉｃａｔｉｏｎＳｔｒｅａｍ６１５クラスの「レプリケート」メソッドへ送信される。ＲｅｐｌｉｃａｔｉｏｎＳｔｒｅａｍ６１５におけるレプリケートメソッドは、メッセージイベントを、システムにおけるソースから複数のイベントストアおよびスレーブブローカへ配信する。こうして、ＲｅｐｌｉｃａｔｉｏｎＳｔｒｅａｍクラス６１５を用いて、マスタブローカで発生するレプリケートされたイベントが送受信される。
【００６１】
マスタブローカは、標準イベントストアインタフェース（「ｃｒｅａｔｅ  ａ  ｎｅｗ  ｑｕｅｕｅ  ｄｅｓｔｉｎａｔｉｏｎ」や「ｒｅｍｏｖｅ  ａｎ  ｅｘｉｓｔｉｎｇ  ｑｕｅｕｅ  ｄｅｓｔｉｎａｔｉｏｎ」等）を通じてスレーブにレプリケートされる種々の管理イベントを行う。マスタブローカによる決定は、レプリケーションストリームプロトコルによって順序付けされてレプリケートされる。
【００６２】
実際のディスク持続は、ＲｅｐｌｉｃａｔｉｏｎＳｔｒｅａｍ６１５からレプリケーションイベントを受信した結果として起こる。ディスクへのデータ書き込みの異なる実施を可能にするために、長期ストレージインタフェースが実装される。図６Ｂは、一実施形態に係る、メッセージを処理するためのメッセージブローカシステムの長期ストレージコンポーネントの例示的クラス図である。長期ストレージコンポーネントは、ＲｅｐｌｉｃａｔｉｏｎＳｔｒｅａｍＬｏｎｇＴｅｒｍＳｔｏｒａｇｅクラス６３５と、ＰｅｒｓｉｓｔｅｎｃｅＡｄａｐｔｅｒＢａｓｅｄＬｏｎｇＴｅｒｍＳｔｏｒａｇｅクラス６４０と、ＬｏｎｇＴｅｒｍＳｔｏｒａｇｅＲｅｐｌｉｃａｔｉｏｎＳｔｒｅａｍＬｉｓｔｅｎｅｒ６４５クラスとを含む。レプリケーションイベントメッセージが各スレーブブローカへ送信されると、スレーブブローカにおけるレシーバは、メッセージイベントをＲｅｐｌｉｃａｔｉｏｎＳｔｒｅａｍＬｉｓｔｅｎｅｒ６４５へ送信する。ＲｅｐｌｉｃａｔｉｏｎＳｔｒｅａｍＬｉｓｔｅｎｅｒのうちの１つ、すなわち、ＬｏｎｇＴｅｒｍＳｔｏｒａｇｅＲｅｐｌｉｃａｔｉｏｎＳｔｒｅａｍＬｉｓｔｅｎｅｒ６４５は、各メッセージイベントを取得し、長期ストレージ持続アダプタ、すなわち、ＰｅｒｓｉｓｔｅｎｃｅＡｄａｐｔｅｒＢａｓｅｄＬｏｎｇＴｅｒｍＳｔｏｒａｇｅ６４０へ渡す。ＰｅｒｓｉｓｔｅｎｃｅＡｄａｐｔｅｒＢａｓｅｄＬｏｎｇＴｅｒｍＳｔｏｒａｇｅ６４０クラスは、ａｄｄＭｅｓｓａｇｅメソッドを用いて、長期ストレージへのメッセージイベントの実際の持続を行う。
【００６３】
図６Ｃは、一実施形態に係る、メッセージを処理するためのメッセージブローカシステムのイベントストアとメッセージブローカとの間のインタフェース６５０の例である。図６Ｃに示すメッセージングキューレプリケーションインタフェースは、レプリケーションストリームプロトコルに関連するメソッドを行うために持続アダプタや他のメッセージングおよびイベントストアコンポーネントによって利用される。例えば、ＲｅｐｕｂｌｉｓｈＲｅｐｌｉｃａｔｉｏｎＥｖｅｎｔメソッド６５５は、スレーブブローカのマスタブローカへの遷移時に、同期点が決定されるとメッセージイベントを再発行するために、レプリケーションストリームによって用いられる。同様に、レプリケーションインタフェースに記載の他のメソッドも、レプリケーションストリームプロトコルを行う際にメッセージングシステムコンポーネントのうちの１つによって用いられる。
【００６４】
図７は、図１に示すエンティティを実施するための例示的コンピュータ７００を示すハイレベルブロック図である。少なくとも１つのプロセッサ７０５が、チップセット７１０に結合されている。また、メモリ７１５、記憶装置７２０、キーボード７２５、グラフィックスアダプタ７３０、ポインティングデバイス７３５、およびネットワークアダプタ７４０も、チップセット７１０に結合されている。ディスプレイ７４５は、グラフィックスアダプタ５３０に結合されている。一実施形態において、チップセット７１０の機能は、メモリコントローラハブ７５０およびＩ／Ｏコントローラハブ７５５によって与えられる。他の実施形態において、メモリ７１５は、チップセット７１０ではなくプロセッサ７０５に直接結合される。
【００６５】
記憶装置７２０は、ハードドライブ、ＣＤ−ＲＯＭ、ＤＶＤ、固体メモリ装置等の任意の非一時的コンピュータ可読記憶媒体である。メモリ７１５は、プロセッサ７０５が使用する命令およびデータを保持する。ポインティングデバイス７３５は、マウス、トラックボール、または他のタイプのポインティングデバイスであってもよく、データをコンピュータ７００に入力するためにキーボード７２５と組み合わせて用いられる。グラフィックスアダプタ７３０は、ディスプレイ７４５上に画像や他の情報を表示する。ネットワークアダプタ７４０は、コンピュータ７００をネットワーク（例：図１のネットワーク１０５）へつなげる。
【００６６】
既知の通り、コンピュータ７００は、図７に示すものと異なるおよび／または他の構成要素を有し得る。また、コンピュータ７００は、図示の構成要素のいずれかを有しなくてもよい。例えば、コンピュータ７００は、キーボード７２５、ポインティングデバイス７３５、グラフィックスアダプタ７３０、および／またはディスプレイ７４５を有しなくてもよい。他の例において、スタジアムビュービジュアリゼーションを表示するように構成されるコンピュータ７００は、タッチスクリーンインタフェースを有するタブレットやスマートフォンであってもよく、キーボード７２５およびポインティングデバイス７３５を有しなくてもよい。記憶装置７２０は、コンピュータ７００構内接続および／または遠隔接続であってもよい。
【００６７】
既知の通り、コンピュータ７００は、本明細書に記載の機能を実現するためのコンピュータプログラムモジュールを実行するように適合されている。本明細書において、「モジュール」は、特定の機能を実現するために利用されるコンピュータプログラムロジックを指す。よって、モジュールは、ハードウェア、ファームウェア、および／またはソフトウェアで実装可能である。一実施形態において、プログラムモジュールは、記憶装置７２０に記憶され、メモリ７１５へロードされて、プロセッサ７０５によって実行される。
【００６８】
本明細書に記載の物理的構成要素の実施形態は、本明細書に記載のものと他のおよび／または異なるモジュールを含み得る。また、モジュールに帰する機能は、他の実施形態において他のまたは異なるモジュールによって行われてもよい。本明細書では、明確さおよび便宜のために、「モジュール」という語を省略することがある。
【その他の構成考察】
【００６９】
上記説明の一部では、アルゴリズム的なプロセスまたは動作の観点で実施形態を説明している。これらのアルゴリズム的な説明および表現は通常、データ処理の熟練者が当業他者に対して仕事の内容を効果的に伝達する際に用いられている。これらの動作は、機能的、計算的、または論理的に説明されているが、プロセッサまたは同等の電気回路、マイクロコード等で実行する命令を含むコンピュータプログラムによって実装されるものと理解される。さらに、一般性を失わずに、これらの機能的動作の構成をモジュールとして参照することが場合によっては都合が良いことも判明した。上記説明した動作および関連するモジュールは、ソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組み合わせとして具現化してもよい。
【００７０】
本明細書で使用する「一実施形態」または「実施形態」という表現はいずれも、その実施形態と関連して説明した特定の要素、特徴、構造、または特性が少なくとも１つの実施形態に含まれることを意味する。また、本明細書の様々な箇所に登場する「一実施形態において」という表現は、必ずしも同じ実施形態を参照しているわけではない。
【００７１】
一部の実施形態は、「結合（ｃｏｕｐｌｅｄ）」および「接続（ｃｏｎｎｅｃｔｅｄ）」という表現をそれぞれの派生語とともに用いて記述してもよいが、これらの用語は、互いの同義語をなすものではないことを理解するべきである。例えば、一部の実施形態は、２つ以上の要素が互いに直接物理的または電気的に接触していることを示すために、「接続（ｃｏｎｎｅｃｔｅｄ）」という用語を用いて記述してもよい。他の例として、一部の実施形態は、２つ以上の要素が直接物理的または電気的に接触していることを示すために、「結合（ｃｏｕｐｌｅｄ）」という用語を用いて記述してもよい。ただし、「結合（ｃｏｕｐｌｅｄ）」という用語は、２つ以上の要素が互いに直接接触はしていないが、互いに協働または相互作用するということを意味していてもよい。なお、実施形態は、これに関連する制約を受けない。
【００７２】
本明細書で使用する「備える（ｃｏｍｐｒｉｓｅｓ）」、「備えている（ｃｏｍｐｒｉｓｉｎｇ）」、「含む（ｉｎｃｌｕｄｅｓ）」、「含んでいる（ｉｎｃｌｕｄｉｎｇ）」、「有する（ｈａｓ）」、「有している（ｈａｖｉｎｇ）」という用語、またはこれらのその他任意の変形は、非排他的な包含を網羅することを意図している。例えば、一連の要素を備えたプロセス、方法、物品、または装置は、必ずしもこれらの要素にのみ限定されず、明確に記載されていないその他の要素またはこれらのプロセス、方法、物品、または装置に固有のその他の要素を含んでいてもよい。さらに、明確に反対のことが記載されていない限り、「または（ｏｒ）」は、包含的論理和の意味を有し、排他的論理和の含意はない。例えば、「条件ＡまたはＢ」は、Ａが真（または存在する）でＢが偽（または存在しない）、Ａが偽（または存在しない）でＢが真（または存在する）、ＡおよびＢともに真（または存在する）、のいずれかによって満足される。
【００７３】
また、本明細書における実施形態の要素および構成要素の記述に不定冠詞（ａまたはａｎ）を使用しているが、これは、単に便宜上のことであって、本開示の一般的な意味を与えるためである。このような記述は、１つまたは少なくとも１つの要素を含むものと解釈されるべきである。また、単数形は、その他の意味が明確に記載されていない限り、複数形も含む。
【００７４】
当業者が本開示内容を読めば、メッセージブローカリングシステムのさらに別の構造設計および機能設計が想到されるであろう。したがって、特定の実施形態および用途を例示・説明したが、本発明は、本明細書に開示の構成および構成要素にのみ限定されるものではなく、本明細書に開示した方法および装置の構成、動作、および詳細に対して、当業者には明白な種々の改良、変更、および変形を行ってもよいものと理解するべきである。本発明の範囲は、以下の請求項によってのみ限定される。
【図１】
0006602866.tif 000003
【図２】
0006602866.tif 000004
【図３】
0006602866.tif 000005
【図４Ａ】
0006602866.tif 000006
【図４Ｂ】
0006602866.tif 000007
【図４Ｃ】
0006602866.tif 000008
【図５】
0006602866.tif 000009
【図６Ａ−１】
0006602866.tif 000010
【図６Ａ−２】
0006602866.tif 000011
【図６Ａ−３】
0006602866.tif 000012
【図６Ｂ−１】
0006602866.tif 000013
【図６Ｂ−２】
0006602866.tif 000014
【図６Ｂ−３】
0006602866.tif 000015
【図６Ｂ−４】
0006602866.tif 000016
【図６Ｃ】
0006602866.tif 000017
【図７】
0006602866.tif 000018