(57)【要約】【課題】【解決手段】ｐｕｂｌｉｓｈ／ｓｕｂｓｃｒｉｂｅメッセージ・ブローカを操作する方法が、パブリッシャからトピックに関するメッセージを受信すること、メッセージをメッセージのシーケンスの開始として識別すること、トピックに対する１つまたは複数の既存のサブスクライバにメッセージを送信すること、トピックに対して新しいサブスクライバを登録すること、トピックに関する別のメッセージをパブリッシャから受信すること、およびトピックに対する１つまたは複数の既存のサブスクライバにその別のメッセージを送信するが、トピックに対する登録済みの新しいサブスクライバには送信しないことを含む。これを達成することのできる一方式は、メッセージをメッセージのシーケンスの開始として識別するステップに続いて、メッセージ・ブローカが、メッセージのシーケンスに対応する新しいサブトピックを作成し、新しいトピックに対して１つまたは複数の既存のサブスクライバを加入させることである。シーケンスに関係する、受信された任意の新しいメッセージが、サブトピックに対して発行されるが、元のトピックに対しては発行されない。トピックに対するいかなる新しいサブスクライバも、サブトピックには加入させられない。【選択図】図１
2011514087.tif 000002
【特許請求の範囲】
【請求項１】
ｐｕｂｌｉｓｈ／ｓｕｂｓｃｒｉｂｅメッセージ・ブローカを操作する方法であって、
パブリッシャからトピックに関するメッセージを受信すること、
前記メッセージをメッセージのシーケンスの開始として識別すること、
前記トピックに対する１つまたは複数の既存のサブスクライバに前記メッセージを送信すること、
新しいサブスクライバが前記トピックに登録したこと、および前記トピックに関して前記シーケンスに関連する別のメッセージがパブリッシャから受信されたことに応答して、前記トピックに対する１つまたは複数の既存のサブスクライバに前記別のメッセージを送信するが、前記トピックに対する前記登録済みの新しいサブスクライバには送信しないこと
を含む方法。
【請求項２】
前記メッセージをメッセージのシーケンスの開始として識別することが、受信したメッセージの内容にアクセスすること、およびアクセスした前記メッセージの内容に従って、前記メッセージをメッセージのシーケンスの開始として識別することを含む請求項１に記載の方法。
【請求項３】
前記トピックに関するさらに別のメッセージを受信すること、前記さらに別のメッセージをメッセージの前記シーケンスの終了として識別すること、ならびに前記トピックに対する１つまたは複数の既存のサブスクライバに、および前記トピックに対する前記登録済みの新しいサブスクライバに、前記トピックに関する前記シーケンスに関連しないそれぞれの別のメッセージを送信することをさらに含む請求項１または２に記載の方法。
【請求項４】
前記シーケンスに関連しないメッセージを受信したことに応答して、前記シーケンスに関連しない前記メッセージに関連する新しいトピックを作成すること、および前記新しいトピックに対して前記新しいサブスクライバを加入させることをさらに含む請求項１ないし３のいずれかに記載の方法。
【請求項５】
前記メッセージをメッセージのシーケンスの開始として識別することに続いて、メッセージの前記シーケンスに対応する新しいトピックを作成すること、および前記新しいトピックに対して前記１つまたは複数の既存のサブスクライバを加入させることをさらに含む請求項１ないし４のいずれかに記載の方法。
【請求項６】
前記トピックに関して受信されるメッセージについて、前記トピックに関して前記メッセージを発行するか、それとも前記新しいトピックに関して前記メッセージを発行するかを判定することをさらに含む請求項４または５に記載の方法。
【請求項７】
パブリッシャからトピックに関するメッセージを受信し、
前記メッセージをメッセージのシーケンスの開始として識別し、
前記トピックに対する１つまたは複数の既存のサブスクライバに前記メッセージを送信し、
新しいサブスクライバが前記トピックに登録したことに応答し、かつ前記トピックに関して前記シーケンスに関連する別のメッセージをパブリッシャから受信したことに応答して、前記トピックに対する１つまたは複数の既存のサブスクライバに前記別のメッセージを送信するが、前記トピックに対する前記登録済みの新しいサブスクライバには送信しないように構成されたｐｕｂｌｉｓｈ／ｓｕｂｓｃｒｉｂｅメッセージ・ブローカ。
【請求項８】
前記メッセージ・ブローカが、前記メッセージをメッセージのシーケンスの開始として識別するときに、受信したメッセージの内容にアクセスし、アクセスした前記メッセージの内容に従って、前記メッセージをメッセージのシーケンスの開始として識別するように構成される請求項７に記載のメッセージ・ブローカ。
【請求項９】
前記メッセージ・ブローカがさらに、前記トピックに関するさらに別のメッセージを受信し、前記さらに別のメッセージをメッセージのシーケンスの終了として識別し、前記トピックに対する１つまたは複数の既存のサブスクライバに、および前記トピックに対する前記登録済みの新しいサブスクライバに、前記トピックに関する前記シーケンスに関連しないそれぞれの別のメッセージを送信するように構成される請求項７または８に記載のメッセージ・ブローカ。
【請求項１０】
前記メッセージ・ブローカがさらに、前記シーケンスに関連しないメッセージを受信したことに応答して、前記シーケンスに関連しない前記メッセージに関連する新しいトピックを作成し、前記新しいトピックに対して前記新しいサブスクライバを加入させるように構成される請求項７ないし９のいずれかに記載のメッセージ・ブローカ。
【請求項１１】
前記メッセージ・ブローカが、前記メッセージをメッセージのシーケンスの開始として識別することに続いて、メッセージの前記シーケンスに対応する新しいトピックを作成し、前記新しいトピックに対して前記１つまたは複数の既存のサブスクライバを加入させるように構成される請求項７ないし１０のいずれかに記載のメッセージ・ブローカ。
【請求項１２】
前記メッセージ・ブローカがさらに、前記トピックに関して受信したメッセージについて、前記トピックに関して前記メッセージを発行するか、それとも前記新しいトピックに関して前記メッセージを発行するかを判定するように構成される請求項１０または１１に記載のメッセージ・ブローカ。
【請求項１３】
ｐｕｂｌｉｓｈ／ｓｕｂｓｃｒｉｂｅメッセージ・ブローカを操作するコンピュータ可読媒体上のコンピュータ・プログラム製品であって、
パブリッシャからトピックに関するメッセージを受信する命令と、
前記メッセージをメッセージのシーケンスの開始として識別する命令と、
前記トピックに対する１つまたは複数の既存のサブスクライバに前記メッセージを送信する命令と、
新しいサブスクライバが前記トピックに登録したこと、および前記トピックに関して前記シーケンスに関連する別のメッセージがパブリッシャから受信されたことに応答して、前記トピックに対する１つまたは複数の既存のサブスクライバに前記別のメッセージを送信するが、前記トピックに対する前記登録済みの新しいサブスクライバには送信しない命令と
を含む製品。
【請求項１４】
前記メッセージをメッセージのシーケンスの開始として識別する前記命令が、受信したメッセージの内容にアクセスする命令と、アクセスした前記メッセージの内容に従って、前記メッセージをメッセージのシーケンスの開始として識別する命令とを含む請求項１３に記載のコンピュータ・プログラム製品。
【請求項１５】
前記トピックに関するさらに別のメッセージを受信する命令と、前記さらに別のメッセージをメッセージの前記シーケンスの終了として識別する命令と、前記トピックに対する１つまたは複数の既存のサブスクライバに、および前記トピックに対する前記登録済みの新しいサブスクライバに、前記トピックに関する前記シーケンスに関連しないそれぞれの別のメッセージを送信する命令とをさらに含む請求項１３または１４に記載のコンピュータ・プログラム製品。
【請求項１６】
前記シーケンスに関連しないメッセージを受信したことに応答して、前記シーケンスに関連しない前記メッセージに関連する新しいトピックを作成する命令と、前記新しいトピックに対して前記新しいサブスクライバを加入させる命令とをさらに含む請求項１３ないし１５のいずれかに記載のコンピュータ・プログラム製品。
【請求項１７】
前記メッセージをメッセージのシーケンスの開始として識別する前記命令に続いて、メッセージの前記シーケンスに対応する新しいトピックを作成する命令と、前記新しいトピックに対して前記１つまたは複数の既存のサブスクライバを加入させる命令とをさらに含む請求項１３ないし１６のいずれかに記載のコンピュータ・プログラム製品。
【請求項１８】
前記トピックに関して受信されるメッセージについて、前記トピックに関して前記メッセージを発行するか、それとも前記新しいトピックに関して前記メッセージを発行するかを判定する命令をさらに含む請求項１６または１７に記載のコンピュータ・プログラム製品。
【請求項１９】
ｐｕｂｌｉｓｈ／ｓｕｂｓｃｒｉｂｅメッセージ・ブローカと共に使用される装置であって、
パブリッシャからトピックに関するメッセージを受信する受信構成要素と、
前記メッセージをメッセージのシーケンスの開始として識別する識別構成要素と、
前記トピックに対する１つまたは複数の既存のサブスクライバに前記メッセージを送信する第１送信機と、
新しいサブスクライバが前記トピックに登録したことに応答し、かつ前記トピックに関して前記シーケンスに関連する別のメッセージをパブリッシャから受信したことに応答して、前記トピックに対する１つまたは複数の既存のサブスクライバに前記別のメッセージを送信するが、前記トピックに対する前記登録済みの新しいサブスクライバには送信しない第２送信機と
を備える装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ｐｕｂｌｉｓｈ／ｓｕｂｓｃｒｉｂｅメッセージ・ブローカを操作する方法、メッセージ・ブローカ自体、およびｐｕｂｌｉｓｈ／ｓｕｂｓｃｒｉｂｅメッセージ・ブローカを操作するコンピュータ可読媒体上のコンピュータ・プログラム製品に関する。
【背景技術】
【０００２】
ｐｕｂｌｉｓｈ／ｓｕｂｓｃｒｉｂｅ（ｐｕｂ／ｓｕｂ）は、非同期メッセージングパラダイムである。ｐｕｂ／ｓｕｂシステムでは、パブリッシャがメッセージ・ブローカにメッセージをポストし、サブスクライバがそのブローカにサブスクリプションを登録する。トピック・ベースのシステムでは、ブローカによってホストされるトピックスに対してメッセージが発行される。トピック・ベースのシステムでのサブスクライバは、サブスクライバが加入するトピックスに対して発行されたすべてのメッセージを受信し、トピックに対するすべてのサブスクライバが同一のメッセージを受信する。ｐｕｂ／ｓｕｂは非常に有用なパラダイムであり、各ｐｕｂ／ｓｕｂメッセージが、メッセージ自体のプロパティ（通常はトピック、時には内容）に従ってルーティングされる。各メッセージが到着するときに、第１ステップとして、ブローカはメッセージを解析し、正しいサブスクライバのセットを求め、第２ステップで、それに応じてメッセージが配布される。システムは非同期式である。現在、ｐｕｂｌｉｓｈ  ｓｕｂｓｃｒｉｂｅ環境では、パブリッシャは、サブスクライバがそれに関するメッセージを受信することのできるトピックに対してメッセージを発行することができる。あるシナリオでは、発行とサブスクリプションの両方を、指定のトピックから別のトピックにリダイレクトすることが有用となる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
何らかの意味をなすためにはすべてが受信されなければならないメッセージのシーケンスを発行するとき、すなわち１つを除いたすべてのメッセージを受信することが有用とはならないときがある。従って、この発明の目的は、トピックが既にシーケンスを開始している場合に、新しいサブスクライバがそのトピックからメッセージを受信しないようにトピックを操作するメッセージ・ブローカを提供することにある。
【課題を解決するための手段】
【０００４】
本発明の第１の態様によれば、ｐｕｂｌｉｓｈ／ｓｕｂｓｃｒｉｂｅメッセージ・ブローカを操作する方法であって、パブリッシャからトピックに関するメッセージを受信すること、メッセージをメッセージのシーケンスの開始として識別すること、トピックに対する１つまたは複数の既存のサブスクライバにメッセージを送信すること、トピックに対して新しいサブスクライバを登録すること、トピックに関する別のメッセージをパブリッシャから受信すること、およびトピックに対する１つまたは複数の既存のサブスクライバにその別のメッセージを送信するが、トピックに対する登録済みの新しいサブスクライバには送信しないことを含む方法が提供される。
【０００５】
本発明の第２の態様によれば、パブリッシャからトピックに関するメッセージを受信し、メッセージをメッセージのシーケンスの開始として識別し、トピックに対する１つまたは複数の既存のサブスクライバにメッセージを送信し、トピックに対する新しいサブスクライバを登録し、トピックに関する別のメッセージをパブリッシャから受信し、トピックに対する１つまたは複数の既存のサブスクライバにその別のメッセージを送信するが、トピックに対する登録済みの新しいサブスクライバには送信しないように構成されたｐｕｂｌｉｓｈ／ｓｕｂｓｃｒｉｂｅメッセージ・ブローカが提供される。
【０００６】
本発明の第３の態様によれば、ｐｕｂｌｉｓｈ／ｓｕｂｓｃｒｉｂｅメッセージ・ブローカを操作するコンピュータ可読媒体上のコンピュータ・プログラム製品であって、パブリッシャからトピックに関するメッセージを受信する命令と、メッセージをメッセージのシーケンスの開始として識別する命令と、トピックに対する１つまたは複数の既存のサブスクライバにメッセージを送信する命令と、トピックに対して新しいサブスクライバを登録する命令と、トピックに関する別のメッセージをパブリッシャから受信する命令と、トピックに対する１つまたは複数の既存のサブスクライバにその別のメッセージを送信するが、トピックに対する登録済みの新しいサブスクライバには送信しない命令とを含む製品が提供される。
【０００７】
好ましい実施形態により、トピックが既にシーケンスを開始している場合に、新しいサブスクライバがそのトピックからメッセージを受信しないようにトピックを操作するメッセージ・ブローカを提供することが可能となる。好ましい実施形態は、パブリッシャとサブスクライバの両方によって使用されるトピックをクライアント知識なしに１つまたは多数の異なるトピックスにどのようにリダイレクトすることができるかを記述する。
【０００８】
これが有用となる特定の一状況は、何らかの意味をなすためにはすべてが受信されなければならないメッセージのシーケンスを発行するとき、すなわち１つを除いたすべてのメッセージを受信することが有用とはならないときである。パブリッシャがゲームでのそれぞれの動きを特定のトピックに対して発行するチェスのゲームを考慮する。サブスクライバがこうした発行をゲームの途中で受信することは意味をなさない。そうしたことは、（サブスクライバが盤上のすべての駒の現在位置を理解するためには）前のメッセージなしでは意味をなさないからである。
【０００９】
好適な場合として、メッセージ・ブローカを操作する方法では、メッセージをメッセージのシーケンスの開始として識別するステップは、受信したメッセージの内容にアクセスすること、およびアクセスしたメッセージの内容から、メッセージをメッセージのシーケンスの開始として識別することを含む。メッセージ・ブローカは、メッセージの新しいシーケンスが開始した時を識別しなければならない。このことを容易に達成することのできる一方法は、メッセージが新しいシーケンスの開始であることを示す、メッセージの内容の中の明示的または暗黙的マーカについて、受信したメッセージの内容を調べることである。例えば、パブリッシャは、メッセージの本文内に、このメッセージが新しいシーケンスの第１メッセージであることをメッセージ・ブローカに示す所定のフラグを含めることができる。フラグがない場合、メッセージの内容からメッセージがシーケンスの開始であることを判定するように、メッセージ・ブローカをインテリジェントに構成することができる。例えば、チェス・ゲームの動きに関して維持されるトピックの上記の例では、例えば「１．ｅ４」または同様の何かの存在が、新しいシーケンスを示す。メッセージを新しいシーケンスの開始として識別することは、メッセージの内容以外の何か、例えばパブリッシャの位置、または（恐らくは過去のメッセージが送信された時間に対する）メッセージが送信された時間に基づくことができる。
【００１０】
好ましくは、メッセージ・ブローカを操作する方法は、トピックに関するさらに別のメッセージを受信すること、そのさらに別のメッセージをメッセージのシーケンスの終了として識別すること、ならびにトピックに対する１つまたは複数の既存のサブスクライバ、およびトピックに対する登録済みの新しいサブスクライバに、トピックに関する将来のすべてのメッセージを送信することをさらに含む。メッセージ・ブローカは、シーケンスの終了を識別し、シーケンス条件に関連する特別な操作手順を効果的に終了させるように構成することもできる。終了が判定された後は、すべてのサブスクライバが同じ立場に戻り、トピックに関して受信される任意の新しいメッセージは、古いサブスクライバであっても、新しいサブスクライバであっても、すべてのサブスクライバに送信されるようになる。新しいシーケンスを開始する別のメッセージが受信される場合、プロセスを再び開始することができる。
【００１１】
理想的には、メッセージ・ブローカを操作する方法は、メッセージをメッセージのシーケンスの開始として識別するステップに続いて、メッセージのシーケンスに対応する新しいトピックを作成すること、および新しいトピックに対して１つまたは複数の既存のサブスクライバを加入させることをさらに含む。次いでこれは、トピックに関して受信されるすべての将来のメッセージについて、トピックに関して各メッセージを発行するか、それとも新しいトピックに関して各メッセージを発行するかを判定することをさらに含むことができる。これは、メッセージ・ブローカがメッセージの既存のシーケンスからの新しいサブスクライバの分離を実施することのできる一方式である。メッセージ・ブローカは、メッセージのシーケンスに対応する新しいサブトピックを作成し、新しいトピックに１つまたは複数の既存のサブスクライバを加入させる。シーケンスに関係する、受信された任意の新しいメッセージは、元のトピックに対してではなく、サブトピックに対して発行される。トピックに対するいかなる新しいサブスクライバも、サブトピックには加入させられない。
【００１２】
これから、添付の図面を参照しながら、単なる例示として本発明の実施形態を説明する。
【図面の簡単な説明】
【００１３】
【図１】ｐｕｂｌｉｓｈ／ｓｕｂｓｃｒｉｂｅシステムの略図である。
【図２】ｐｕｂｌｉｓｈ／ｓｕｂｓｃｒｉｂｅシステムの別の略図である。
【図３】ｐｕｂｌｉｓｈ／ｓｕｂｓｃｒｉｂｅシステムのメッセージ・ブローカを操作する方法の流れ図である。
【図４】ｐｕｂｌｉｓｈ／ｓｕｂｓｃｒｉｂｅシステムの第２実施形態の略図である。
【図５】ｐｕｂｌｉｓｈ／ｓｕｂｓｃｒｉｂｅシステムの第２実施形態の略図である。
【図６】ｐｕｂｌｉｓｈ／ｓｕｂｓｃｒｉｂｅシステムの第２実施形態の略図である。
【発明を実施するための形態】
【００１４】
ｐｕｂｌｉｓｈ／ｓｕｂｓｃｒｉｂｅシステムの単純な実施形態が、図１に示されている。このシステムは、メッセージ・ブローカ１０、パブリッシャ１２、および２つのサブスクライバ１４を含む。メッセージ・ブローカ１０は、適切なネットワークを介してアクセスされるサーバで実装される。パブリッシャ１２およびサブスクライバ１４は、ブローカ１０を実行するサーバに接続する能力を有する任意のコンピューティング機能でよい。パブリッシャ１２およびサブスクライバ１４は、デスクトップ・コンピュータ、または例えば携帯電話やＰＤＡなどのモバイル装置でよい。接続装置のパブリッシャまたはサブスクライバとしての指定は、論理ステータスであり、実際には、任意の接続装置は、異なる時間にパブリッシャとサブスクライバのどちらにもなることができる。
【００１５】
ブローカ１０は、トピックス１６のリストを維持し、この例では、トピックス１６は第１トピックＴ１および第２トピックＴ２である。周知のインターフェースを介して、接続装置は、ブローカ１０によって維持されるトピックスを発見することができ、望む通りにトピックスに参加し、脱退することができる。接続装置はまた、ブローカ１０によって維持される適切な許可ポリシーに対する接続装置のステータスに応じて、トピックスを作成することもできる。サブスクライバＳ１は、トピックＴ１とトピックＴ２のどちらにも加入する。ブローカ１０は、こうしたトピックス１６にそのサブスクライバ１４を登録したと言われる。一方、サブスクライバＳ２は、トピックＴ１に関するサブスクライバであるだけである。一般には、トピックス１６は、より記述的である「ゲーム」などの指定を有し、トピックス１６の存在を照会する装置は、トピック１６についての情報も見つけることができる。
【００１６】
図１は、ｐｕｂｌｉｓｈ／ｓｕｂｓｃｒｉｂｅシステムの非常に単純な実施形態を示し、実際には、ブローカ１０は、非常に多数のトピックスをそのサブスクライバと共に格納する。ブローカ１０で格納される各サブスクライバは、アドレスを有する。このアドレス（ＩＰアドレスなど）は、関連するサブスクライビング装置へのルーティングを定義する。
【００１７】
メッセージ１８が図１に示されており、メッセージ１８は、それが関係するトピックについての情報をその中に含む。単純なシステムでは、ブローカ１０に送信される各メッセージ１８は、ヘッダおよび本文を含む。ヘッダは、トピック指定（例えばＴ１）を含み、またはトピック指定からなり、本文は、メッセージ１８のテキストを含む。ブローカ１０は、関連するサブスクライバ１４へのメッセージ１８のルーティングを実現する。この場合、メッセージ１８はトピックＴ１に関係するので、ブローカ１０は、そのメッセージ１８を２つのサブスクライバＳ１およびＳ２にルーティングする。一般には、ブローカ１０は、メッセージ１８のどんなコピーも維持しないが、ブローカ１０に対する管理アクセスを介してこのことを適合させることができる。例えば、ブローカ１０は、トピック１６に対する任意の新しいサブスクライバに各トピック１６に関する最後のメッセージ１８を送信するために、そのメッセージを格納することができる。
【００１８】
図２は、新しいサブスクライバＳ３がトピックＴ１に加入した後にｐｕｂｌｉｓｈ／ｓｕｂｓｃｒｉｂｅシステムに何が生じるかを示す。新しいサブスクライバ１４は、ブローカ１０に適切な管理メッセージを送信することにより、トピックＴ１に加入することを望むことをブローカ１０に登録する。図からわかるように、ブローカ１０は、そのトピックＴ１に関してブローカ１０のリスト１６内に新しいサブスクライバを登録している。パブリッシャ１２から新しいメッセージ１８’を受信したとき、ブローカ１０は、そのトピックに対する現サブスクライバのすべてにそのメッセージ１８’を配布し、現サブスクライバは、サブスクライバＳ１、Ｓ２、およびＳ３である。ブローカ１０によって維持されるリスト１６は、サブスクライバが特定のトピックス１６に加入し、脱退することに伴って定期的に変化する。
【００１９】
しかし、標準メッセージング・ブローカの動作は、図３の流れ図に従って改善することができる。これは、標準構成では、新しいサブスクライバ１４がトピック１６に加入するとすぐにメッセージ１８の受信を首尾よく開始することができ、その結果、新しいサブスクライバ１４がシーケンスの先の部分を形成するメッセージ１８を受信していないときに、シーケンスの一部を形成するメッセージ１８を受信することがあるからである。この後のメッセージ内容は、後者のサブスクライバ１４にとって紛らわしい可能性があり、または無意味である可能性が考えられる。この状況に対処するために、図１および２のメッセージ・ブローカ１０が、図３のプロセス流れ図に従って動作するように構成される。
【００２０】
ｐｕｂｌｉｓｈ／ｓｕｂｓｃｒｉｂｅメッセージ・ブローカを操作する方法は、第１に、パブリッシャ１２からトピック１６に関するメッセージ１８を受信するステップＳ１と、第２に、メッセージ１８をメッセージのシーケンスの開始として識別するステップＳ２とを含む。ブローカ１０は、受信したメッセージ１８をメッセージの新しいシーケンスとの開始として識別しなければならない。これを達成する一方式は、メッセージ１８が新しいシーケンスの開始であることを示す、メッセージ１８の内容の中のマーカ（明示的または暗黙的でよい）について、受信したメッセージ１８の内容をブローカ１０が調べることである。
【００２１】
例えば、メッセージ１８の元のパブリッシャ１２は、メッセージの本文内に、メッセージ１８がメッセージの新しいシーケンスの開始であることをメッセージ・ブローカ１０に示すフラグを所定のプロトコルに従って含めることができる。フラグがない場合、メッセージの内容からメッセージ１８がメッセージのシーケンスの最初であることを（１つまたは複数の処理アルゴリズムによって）判定するように、メッセージ・ブローカ１０を構成することができる。例えば、トピック１６が１つまたは複数のチェス・ゲームの動きに関して維持される場合、例えば「１．ｅ４」または同様の何かの存在が、新しいシーケンスが始まったことを示す。
【００２２】
メッセージを新しいシーケンスの開始として識別することは、メッセージ１８の内容以外の何かに基づくことができる。例えば、特定のパブリッシャ１２をメッセージ１８の新しいシーケンスのソースとして識別するようにメッセージ・ブローカ１０を構成することができ、その場合、ステップＳ２でのメッセージ１８の識別は、パブリッシャ１２の位置に基づく。ブローカ１０によって実装される別の実現可能な方式は、絶対時間（その日の第１メッセージ）、または例えば以前のメッセージが送信された時間に関係する相対時間としての、メッセージが送信された時間に関係付けることができる。
【００２３】
メッセージ１８を受信した後、ステップＳ３で、メッセージ・ブローカ１０が、トピック１６に対する（１つまたは複数の）既存のサブスクライバ１４にメッセージ１８を送信するように構成される。この時点で、ブローカ１０は、受信したメッセージをまさにあたかも通常のメッセージ１８であるかのように扱っており、それぞれのトピック１６に登録する現在のサブスクライバ１４のすべてにそのメッセージ１８を送信する。実際、メッセージ１８のシーケンスが始まった後に新しいサブスクライバ１４がトピック１６に参加しない場合、メッセージ・ブローカ１０の動作で変更は行われない。
【００２４】
しかし、ステップＳ４で、メッセージ・ブローカ１０は、トピック１６に対する新しいサブスクライバ１４を登録する。新しいサブスクライバ１４がトピック１６に追加された後は、ステップＳ５で、パブリッシャ１２からトピック１６に関する別のメッセージ１８を受信するとき、メッセージ・ブローカ１０は、トピック１６に対する既存のサブスクライバ１４にその別のメッセージ１８を送信するが、トピック１６に対する登録済みの新しいサブスクライバ１４には送信しないように構成される（ステップＳ６）。実際に、新しいシーケンスが始まった後にトピック１６に参加するサブスクライバ１４は、トピック１６に関するどんな別のメッセージ１８も受信しない。既存のサブスクライバ１４だけが新しいメッセージ１８を受信する。
【００２５】
ブローカ１０はまた、トピック１６に関するさらに別のメッセージ１８を受信し、そのさらに別のメッセージ１８をメッセージのシーケンスの終了として識別し、トピック１６に対する既存のサブスクライバ１４、およびトピック１６に対する登録済みの新しいサブスクライバ１４に、トピック１６に関するすべての将来のメッセージ１８を送信するように構成される。ブローカ１０は、シーケンスを閉じ、通常動作モードに戻る手順を実装している。シーケンスに対して終了メッセージが検出された後、シーケンスが進行中にトピック１６に登録された新しいサブスクライバ（複数可）１４は、今度は、トピック１６に対して発行されるすべての新しいメッセージ１８を受信する。
【００２６】
既存のサブスクライバと新しいサブスクライバの分離を実装するようにブローカ１０を構成することのできる一方式は、シーケンスを管理するために、バックグラウンドで新しいサブトピックを作成することである。パブリッシャ１２およびサブスクライバ１４は、サブトピックの存在に気付いていないが、メッセージ１８をメッセージのシーケンスの開始として識別するステップ（ステップＳ２）に続いて、ブローカ１０は、メッセージのシーケンスに対応する新しいトピックを作成し、新しいトピックに１つまたは複数の既存のサブスクライバ１４を加入させるように構成される。
【００２７】
これがどのように機能するかについての概要が、図４を参照しながら以下で説明される。この図では、サブスクライバＳ１がトピック１６に加入しており、トピック１６は名前「ゲーム」を有する。ブローカ１０は、トピック１６に対するサブスクライバＳ１のサブスクリプションを登録する。次いで、パブリッシャＰ１が、Ｇａｍｅ１に関する第１メッセージ１８をトピック「ゲーム」に対して発行する。ブローカ１０は、発行されたメッセージ１８を受信して、このメッセージ１８をメッセージ１８の新しいシーケンスの開始として識別する。ブローカ１０は、実際には新しいサブトピック２０を作成し、「ゲーム／ｇａｍｅ１」と題する、トピック２０に関するメッセージ１８を発行する。発行したメッセージ１８を送信する前に、ブローカ１０は、サブトピック２０に対するすべての既存のサブスクライバ１４（すなわちサブスクライバＳ１）に関するサブスクリプションを作成する。そのときサブスクライバＳ１は、トピック「ゲーム」およびサブトピック「ゲーム／ｇａｍｅ１」に加入し、Ｇａｍｅ１に関する最初の発行されたメッセージ１８を受信する。
【００２８】
図５は、新しいサブスクライバＳ２がトピック「ゲーム」に加入するときに何が生じるかを示す。ブローカ１０は、トピック「ゲーム」に対するサブスクライバＳ２のサブスクリプションを登録するが、新しいサブスクライバＳ２がメッセージ・ブローカ１０によって登録されたときに既に存在し、動作中であったサブトピック２０に対するサブスクライバＳ２のサブスクリプションは登録しない。パブリッシャＰ１がＧａｍｅ１に関する別のメッセージ１８をトピック「ゲーム」に対して発行するとき、ブローカ１０は、発行されたメッセージ１８を受信し、それをトピック「ゲーム／ｇａｍｅ１」に対して発行する。既存のサブスクライバ（Ｓ１）は、新しいメッセージ１８を受信するが、新しいサブスクライバＳ２は受信しない。サブスクライバＳ１は、Ｇａｍｅ１に関する第２メッセージを受信するが、サブスクライバＳ２は受信しない。
【００２９】
メッセージのシーケンスのネスティングが起こり得る。例えば、第１シーケンスが進行中に、メッセージの新しいシーケンスを新しいサブトピック２０として開始する可能性がある。このことが図６に示される。この例では、パブリッシャＰ２が、Ｇａｍｅ２に関する第１メッセージ１８をトピック「ゲーム」に対して発行する。ブローカ１０は、発行されたメッセージ１８を受信し、メッセージ１８をメッセージ１８の新しいシーケンスの開始として識別し、したがって第２サブトピック２０を作成する。ブローカ１０は、実際にはトピック「ゲーム／ｇａｍｅ２」に関するメッセージ１８を発行する。発行されたメッセージ１８を送信する前に、ブローカは、サブトピック「ゲーム／ｇａｍｅ２」に対するすべての既存のサブスクライバ（すなわちサブスクライバＳ１およびサブスクライバＳ２）に関するサブスクリプションを作成する。そのときサブスクライバＳ１は、トピック「ゲーム」およびサブトピックス「ゲーム／ｇａｍｅ１」および「ゲーム／ｇａｍｅ２」に加入し、そのときサブスクライバＳ２は、トピック「ゲーム」およびサブトピック「ゲーム／ｇａｍｅ２」に加入する。サブスクライバＳ１およびサブスクライバＳ２はどちらも、Ｇａｍｅ２に関する第１メッセージ１８を受信する。
【００３０】
サブトピック２０の名前を求めることのできる様々な方式がある。例えば、サブトピック２０の名前は、例えばブローカ１０上で管理可能とすることができ、または新しいシーケンスの開始を示すメッセージ１８のタイムスタンプに基づくことができる（実際には、サブトピック２０の名前は人間が読取り可能である必要はなく、名前は任意の文字の構成を含むことができる）。
【００３１】
このことを実装し、拡張することのできる多数の方式がある。すべてのシナリオは、トピックごとのものであり、複数のトピックスに関するメッセージ・シーケンスについては許可されない（どのクライアントも知る限り、異なるトピックスが明らかにブローカによって使用される）。
【００３２】
メッセージのシーケンスの開始および終了を判定するのに多数の異なる方式がある。例えば、パブリッシャ・クライアントＩＤによってメッセージ・シーケンスを分割することが可能である。この場合、パブリッシャはメッセージ・シーケンスに気付いておらず、現パブリッシャ実装に対する変更は不要である。別の方法では、パブリッシャがブローカ１０にＡＰＩ呼出しを行い、メッセージ・シーケンスの開始および終了を指定することを可能にすることもできる（パブリッシャは、一度に単一のメッセージ・シーケンスを管理することができる）。第３の代替実施形態は、パブリッシャがメッセージ・ヘッダでシーケンスＩＤを指定することを可能にすることであり、これにより、パブリッシャが一度に複数のメッセージ・シーケンスを管理することが可能となり、インターリーブすることができる。競合を回避するために固有シーケンスＩＤを得る方法がブローカから要求されることがあることに留意されたい。
【００３３】
トピックスからサブトピックスにサブスクライバをいつリダイレクトするかを判定することは、いくつかのポリシーに基づくことができる。例えば、サブトピックスが作成される（メイン）トピックからサブスクライバが加入解除するまで、サブスクライバは、後で作成されたすべてのサブトピックスに加入する。サブスクライバは、どんなリダイレクションも気付かず、実際には、単一の既知のサブスクリプションを介して複数のトピックスに加入し、すなわち現サブスクライバ実装に対する変更はない。あるいは、サブスクライバは、次に新しく作成されたサブトピック（その時点で、サブスクライバのメイン・サブスクリプションが除去される）にだけ加入し、この場合もサブスクライバはどんなリダイレクションも気付かず、すなわち現サブスクライバ実装に対する変更はない。サブスクライバは、上記の１つをＡＰＩサブスクリプション呼出しの一部として選択することができ、その場合、サブスクライバは、トピック・リダイレクションが行われることに気付くが、サブスクライバがリダイレクトされる実際のトピックスには気付かない。
【００３４】
サブトピックス２０を使用する本発明の実施形態では、サブトピック２０が作成された後は、サブスクライバ１４がベース・トピック１６から加入解除することが可能である。これにより、サブスクライバ１４にとって有用な機能が与えられる。例えば、メッセージ・ブローカ１０の動作に対する拡張は、サブスクライバ１４にこの機能を気付かせることであり、これにより、サブスクライバがメッセージ・ブローカ１０に効果的に指令すること−「ベース・トピックに関する第１トランザクションに加入し、将来のトランザクションについては知りたくはなく、現れる最初のトランザクションだけについて知りたい」−が可能となり、これは、新しいサブトピック２０が作成され、サブスクライバ１４が自動的に新しいサブトピック２０に加入するとすぐに、ベース・トピック１６に対するサブスクライバ１４のサブスクリプションを除去するようにブローカ１０に命令することになる。
【００３５】
既存のｐｕｂｌｉｓｈ／ｓｕｂｓｃｒｉｂｅシステムと同じく、切断に続いて、サブスクライバがサブスクライバの実際のサブスクリプションを維持するために、サブスクリプションは耐久性のあるものでなければならない。耐久性のないサブスクライバ再接続は、以前のどんなサブトピックスにもリダイレクトされない。サブスクライバがメイン・トピックから加入解除するとき、すべての関連するサブトピック・サブスクリプションも除去されなければならない。こうした関連付けをブローカによって維持しなければならないことに留意されたい。
【００３６】
メイン構成の他の拡張も可能である。例えば、パブリッシャがサブトピックにリダイレクトすべきサブスクライバの数を指定することができるようにシステムを構成することができる。１つ（またはｎ個）だけのサブスクライバ（複数可）が所与のメッセージのシーケンスを受信することをパブリッシャが指定することが有用であることがある。
【図１】
2011514087.tif 000003
【図２】
2011514087.tif 000004
【図３】
2011514087.tif 000005
【図４】
2011514087.tif 000006
【図５】
2011514087.tif 000007
【図６】
2011514087.tif 000008
【国際調査報告】
2011514087.tif 000009
2011514087.tif 000010
2011514087.tif 000011