(57)【要約】【課題】発行／購読メッセージング・システムにおいてメッセージの購読を管理するための方法、装置、またはコンピュータ・プログラム製品を提供すること。【解決手段】ブローカ・アプリケーション・プログラムでサブスクライバ・アプリケーション・プログラムの状態を保有するように、発行／購読メッセージング・システムにおいてメッセージ・ブローカ・アプリケーション・プログラムおよびメッセージ・サブスクライバ・アプリケーション・プログラムを管理するための方法、装置、またはコンピュータ・プログラム製品が開示される。【選択図】図２
2014515152.tif 000002
【特許請求の範囲】
【請求項１】
発行／購読メッセージング・システムのメッセージ購読アプリケーション・プログラムでメッセージの購読を管理するための方法であって、
メッセージ・ブローカの組のそれぞれによって並列に提供される購読を購読するステップであって、前記購読は共通の順番のメッセージを含み、それぞれの共通のメッセージは共通のシーケンシャル・メッセージ識別子（ＳＭＩ）に関連付けられる、ステップと、
前記メッセージ・ブローカのうちの選択された１つからメッセージを取得し、前記メッセージ・ブローカにおける前記購読に関する関連するＳＭＩの保存をトリガするステップと、
メッセージ・サブスクライバの再始動に応じて、メッセージ・ブローカの前記組に戻って、前記メッセージ・ブローカのうちの任意の１つで前記購読に関する最も新しい保存されたＳＭＩを判定するステップと、
前記メッセージ・ブローカのうちの選択された１つから、前記最も新しいＳＭＩに関連するメッセージの続きのメッセージを要求することによって前記購読を再開するステップとを含む、方法。
【請求項２】
前記選択されたメッセージ・ブローカから前記購読を再開する前記ステップに応じて、前記組の残りのメッセージ・ブローカのそれぞれに、前記判定された最も新しいＳＭＩに関連する前記メッセージ以前の、前記順番の中のすべてのキューに入れられたメッセージを破棄するように指示するさらなるステップを含む請求項１に記載の方法。
【請求項３】
所与のメッセージの受信の肯定応答が、前記ＳＭＩの前記保存をトリガする請求項１または２のいずれかに記載の方法。
【請求項４】
前記メッセージが、所定のプロトコルにしたがって次々に各ブローカから順番に要求される請求項１ないし３のいずれかに記載の方法。
【請求項５】
前記プロトコルが、ラウンド・ロビン・プロトコルである請求項４に記載の方法。
【請求項６】
発行／購読メッセージング・システムのメッセージ・ブローカ・アプリケーション・プログラムでメッセージの購読を管理するための方法であって、
メッセージ・サブスクライバからの購読要求に応じて購読を購読するステップであって、前記購読は共通の順番のメッセージを含み、それぞれの共通のメッセージは共通のシーケンシャル・メッセージ識別子（ＳＭＩ）に関連付けられる、ステップと、
前記メッセージ・サブスクライバにメッセージを送信し、前記メッセージ・ブローカにおいて関連するＳＭＩを前記購読に関連して記録するステップと、
前記メッセージ・サブスクライバからの要求に応じて前記ＳＭＩを前記メッセージ・サブスクライバに送信するステップとを含む、方法。
【請求項７】
所与のＳＭＩに対する続きのメッセージの要求に応じて、前記続きのメッセージを送信するさらなるステップを含む請求項６に記載の方法。
【請求項８】
前記続きのメッセージを送信する前記ステップに応じて、前記続きのメッセージおよび前記順番の中のすべてのキューに入れられた前のメッセージを破棄するさらなるステップを含む請求項７に記載の方法。
【請求項９】
前記メッセージ・サブスクライバに前記メッセージを送信する前記ステップおよび前記購読に関する前記ＳＭＩを記録する前記ステップが、単一の処理単位で実行される請求項６ないし８のいずれかに記載の方法。
【請求項１０】
前記ＳＭＩが、永続的ストレージに保存される請求項６ないし９のいずれかに記載の方法。
【請求項１１】
発行／購読メッセージング・システムのメッセージ購読アプリケーション・プログラムでメッセージの購読を管理するための装置であって、
メッセージ・ブローカの組のそれぞれによって並列に提供される購読を購読することであって、前記購読は共通の順番のメッセージを含み、それぞれの共通のメッセージは共通のシーケンシャル・メッセージ識別子（ＳＭＩ）に関連付けられる、ことと、
前記メッセージ・ブローカのうちの選択された１つからメッセージを取得し、前記メッセージ・ブローカにおける前記購読に関する関連するＳＭＩの保存をトリガすることと、
メッセージ・サブスクライバの再始動に応じて、メッセージ・ブローカの前記組に戻って、前記メッセージ・ブローカのうちの任意の１つで前記購読に関する最も新しい保存されたＳＭＩを判定することと、
前記メッセージ・ブローカのうちの選択された１つから、前記最も新しいＳＭＩに関連するメッセージの続きのメッセージを要求することによって前記購読を再開することとを行うように動作可能である、装置。
【請求項１２】
前記選択されたメッセージ・ブローカから前記購読を前記再開することに応じて、前記組の残りのメッセージ・ブローカのそれぞれに、前記判定された最も新しいＳＭＩに関連する前記メッセージ以前の、前記順番の中のすべてのキューに入れられたメッセージを破棄するように指示するようにさらに動作可能である請求項１１に記載の装置。
【請求項１３】
所与のメッセージの受信の肯定応答が、前記ＳＭＩの前記保存をトリガする請求項１１または１２のいずれかに記載の装置。
【請求項１４】
前記メッセージが、所定のプロトコルにしたがって次々に各ブローカから順番に要求される請求項１１ないし１３のいずれかに記載の装置。
【請求項１５】
前記プロトコルが、ラウンド・ロビン・プロトコルである請求項１４に記載の装置。
【請求項１６】
発行／購読メッセージング・システムのメッセージ・ブローカ・アプリケーション・プログラムでメッセージの購読を管理するための装置であって、
メッセージ・サブスクライバからの購読要求に応じて購読を購読することであって、前記購読は共通の順番のメッセージを含み、それぞれの共通のメッセージは共通のシーケンシャル・メッセージ識別子（ＳＭＩ）に関連付けられる、ことと、
前記メッセージ・サブスクライバにメッセージを送信し、前記メッセージ・ブローカにおいて関連するＳＭＩを前記購読に関連して記録することと、
前記メッセージ・サブスクライバからの要求に応じて前記ＳＭＩを前記メッセージ・サブスクライバに送信することとを行うように動作可能である、装置。
【請求項１７】
所与のＳＭＩに対する続きのメッセージの要求に応じて、前記続きのメッセージを送信するようにさらに動作可能である請求項１６に記載の装置。
【請求項１８】
前記続きのメッセージを前記送信することに応じて、前記続きのメッセージおよび前記順番の中のすべてのキューに入れられた前のメッセージを破棄するようにさらに動作可能である請求項１７に記載の装置。
【請求項１９】
前記メッセージ・サブスクライバに前記メッセージを前記送信することおよび前記購読に関する前記ＳＭＩを前記記録することが、単一の処理単位で実行される請求項１６ないし１８のいずれかに記載の装置。
【請求項２０】
前記ＳＭＩが、永続的ストレージに保存される請求項１６ないし１９のいずれかに記載の装置。
【請求項２１】
コンピュータ可読媒体に記憶され、コンピュータの内部メモリにロードされ得るコンピュータ・プログラムであって、コンピュータで実行されるときに、請求項１ないし１０のいずれかに記載の方法を実行するように構成されたソフトウェア・コード部分を含む、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、発行／購読メッセージング・システムにおいてメッセージの購読を管理するための方法、装置、またはコンピュータ・プログラム製品に関する。
【背景技術】
【０００２】
コンピュータ化された発行／購読メッセージング・システムにおいては、サブスクライバ・アプリケーション・プログラム（サブスクライバ）が、発行されたメッセージを受信するために単一のメッセージ・ブローカ・アプリケーション・プログラム（メッセージ・ブローカ）を購読する可能性がある。このメッセージ・ブローカが故障する場合、サブスクライバは、もはやメッセージを受信することができない。サブスクライバは、メッセージ・ブローカに再接続されるときには、いくつかのメッセージを見逃してしまっている恐れがある。
【０００３】
一部の発行／購読メッセージング・システムは、購読サービスの喪失または中断の可能性を減らすために高信頼性高可用性（high reliability high availability）（ＨＲＨＩ）メッセージ・ブローカを提供する。言い換えると、そのようなＨＲＨＩサービスは、所与の購読に関してメッセージの順序を維持し、メッセージを失わないように構成される。
【０００４】
そのような購読サービスは、複数の購読ストリーム（subscription stream）を提供する複数のブローカを同時に購読することによって提供され得る。購読は、複数のメッセージ・ブローカから直接受信されるか、または中間メッセージ・ブローカを１つ購読することによって受信され得る。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
そのようなＨＲＨＩ購読サービスの１つの問題は、それらのサービスが、メッセージ・サブスクライバ・アプリケーション・プログラムまたはメッセージ・ブローカ・アプリケーション・プログラムのどちらかで必要とされる処理の点で比較的コストが高いことである。例えば、サブスクライバの状態が保有される必要があり、つまり、所与の購読からのどのメッセージが受信されたかの記録が保有される必要がある。状態は、関連するメッセージ・ブローカから切断された後に購読を適切に修復することを可能にする。さらに、単一の購読が複数のメッセージ・ブローカから受信される場合、冗長なまたは重複するメッセージを管理することは、比較的複雑なプロセスである。
【課題を解決するための手段】
【０００６】
本発明の一実施形態は、発行／購読メッセージング・システムのメッセージ購読アプリケーション・プログラムでメッセージの購読を管理するための方法を提供し、方法は、
メッセージ・ブローカの組のそれぞれによって並列に提供される購読を購読するステップであって、購読は共通の順番のメッセージを含み、それぞれの共通のメッセージは共通のシーケンシャル・メッセージ識別子（sequential message identifier）（ＳＭＩ）に関連付けられる、ステップと、
メッセージ・ブローカのうちの選択された１つからメッセージを取得し、メッセージ・ブローカにおける購読に関する関連するＳＭＩの保存をトリガするステップと、
メッセージ・サブスクライバの再始動に応じて、メッセージ・ブローカの組に戻って、メッセージ・ブローカのうちの任意の１つで購読に関する最も新しい保存されたＳＭＩを判定するステップと、
メッセージ・ブローカのうちの選択された１つから、最も新しいＳＭＩに関連するメッセージの続きのメッセージを要求することによって購読を再開するステップとを含む。
【０００７】
方法は、
選択されたメッセージ・ブローカから購読を再開するステップに応じて、その組の残りのメッセージ・ブローカのそれぞれに、判定された最も新しいＳＭＩに関連するメッセージ以前の、順番の中のすべてのキューに入れられたメッセージを破棄するように指示するさらなるステップを含み得る。
【０００８】
所与のメッセージの受信の肯定応答が、ＳＭＩの保存をトリガする可能性がある。メッセージは、所定のプロトコルにしたがって次々に各ブローカから順番に要求される可能性がある。プロトコルは、ラウンド・ロビン・プロトコルであっても良い。
【０００９】
別の実施形態は、発行／購読メッセージング・システムのメッセージ・ブローカ・アプリケーション・プログラムでメッセージの購読を管理するための方法を提供し、方法は、
メッセージ・サブスクライバからの購読要求に応じて購読を購読するステップであって、購読は共通の順番のメッセージを含み、それぞれの共通のメッセージは共通のシーケンシャル・メッセージ識別子（ＳＭＩ）に関連付けられる、ステップと、
メッセージ・サブスクライバにメッセージを送信し、メッセージ・ブローカにおいて関連するＳＭＩを購読に関連して記録するステップと、
メッセージ・サブスクライバからの要求に応じてＳＭＩをメッセージ・サブスクライバに送信するステップとを含む。
方法は、
所与のＳＭＩに対する続きのメッセージの要求に応じて、続きのメッセージを送信するさらなるステップを含み得る。方法は、
続きのメッセージを送信するステップに応じて、続きのメッセージおよび順番の中のすべてのキューに入れられた前のメッセージを破棄するさらなるステップを含み得る。
【００１０】
メッセージ・サブスクライバにメッセージを送信するステップおよび購読に関するＳＭＩを記録するステップは、単一の処理単位で実行される可能性がある。ＳＭＩは、永続的ストレージに保存しても良い。
【００１１】
さらなる実施形態は、発行／購読メッセージング・システムのメッセージ購読アプリケーション・プログラムでメッセージの購読を管理するための装置を提供し、装置は、
メッセージ・ブローカの組のそれぞれによって並列に提供される購読を購読することであって、購読は共通の順番のメッセージを含み、それぞれの共通のメッセージは共通のシーケンシャル・メッセージ識別子（ＳＭＩ）に関連付けられる、ことと、
メッセージ・ブローカのうちの選択された１つからメッセージを取得し、メッセージ・ブローカにおける購読に関する関連するＳＭＩの保存をトリガすることと、
メッセージ・サブスクライバの再始動に応じて、メッセージ・ブローカの組に戻って、メッセージ・ブローカのうちの任意の１つで購読に関する最も新しい保存されたＳＭＩを判定することと、
メッセージ・ブローカのうちの選択された１つから、最も新しいＳＭＩに関連するメッセージの続きのメッセージを要求することによって購読を再開することとを行うように動作可能である。
【００１２】
別の実施形態は、発行／購読メッセージング・システムのメッセージ・ブローカ・アプリケーション・プログラムでメッセージの購読を管理するための装置を提供し、装置は、
メッセージ・サブスクライバからの購読要求に応じて購読を購読することであって、購読は共通の順番のメッセージを含み、それぞれの共通のメッセージは共通のシーケンシャル・メッセージ識別子（ＳＭＩ）に関連付けられる、ことと、
メッセージ・サブスクライバにメッセージを送信し、メッセージ・ブローカにおいて関連するＳＭＩを購読に関連して記録することと、
メッセージ・サブスクライバからの要求に応じてＳＭＩをメッセージ・サブスクライバに送信することとを行うように動作可能である。
【００１３】
さらなる実施形態は、コンピュータ可読媒体に記憶され、コンピュータの内部メモリにロードされ得るコンピュータ・プログラムであって、コンピュータで実行されるときに、発行／購読メッセージング・システムのメッセージ購読アプリケーション・プログラムでメッセージの購読を管理するための方法を実行するように構成されたソフトウェア・コード部分を含む、コンピュータ・プログラムを提供し、方法は、
メッセージ・ブローカの組のそれぞれによって並列に提供される購読を購読するステップであって、購読は共通の順番のメッセージを含み、それぞれの共通のメッセージは共通のシーケンシャル・メッセージ識別子（ＳＭＩ）に関連付けられる、ステップと、
メッセージ・ブローカのうちの選択された１つからメッセージを取得し、メッセージ・ブローカにおける購読に関する関連するＳＭＩの保存をトリガするステップと、
メッセージ・サブスクライバの再始動に応じて、メッセージ・ブローカの組に戻って、メッセージ・ブローカのうちの任意の１つで購読に関する最も新しい保存されたＳＭＩを判定するステップと、
メッセージ・ブローカのうちの選択された１つから、最も新しいＳＭＩに関連するメッセージの続きのメッセージを要求することによって購読を再開するステップとを含む。
【００１４】
さらなる実施形態は、コンピュータ可読媒体に記憶され、コンピュータの内部メモリにロードされ得るコンピュータ・プログラムであって、コンピュータで実行されるときに、発行／購読メッセージング・システムのメッセージ・ブローカ・アプリケーション・プログラムでメッセージの購読を管理するための方法を実行するように構成されたソフトウェア・コード部分を含む、コンピュータ・プログラムを提供し、方法は、
メッセージ・サブスクライバからの購読要求に応じて購読を購読するステップであって、購読は共通の順番のメッセージを含み、それぞれの共通のメッセージは共通のシーケンシャル・メッセージ識別子（ＳＭＩ）に関連付けられる、ステップと、
メッセージ・サブスクライバにメッセージを送信し、メッセージ・ブローカにおいて関連するＳＭＩを購読に関連して記録するステップと、
メッセージ・サブスクライバからの要求に応じてＳＭＩをメッセージ・サブスクライバに送信するステップとを含む。
【００１５】
ここで、本発明の実施形態が、添付の図面を参照して単なる例として説明される。
【図面の簡単な説明】
【００１６】
【図１】コンピュータ化された発行／購読メッセージング・システムの概略図である。
【図２】図１の発行／購読メッセージング・システムによって実行される処理の図示された例を示す図である。
【図３】図１の発行／購読メッセージング・システムによって実行される処理の図示された例を示す図である。
【図４】図１の発行／購読メッセージング・システムによって実行される処理の図示された例を示す図である。
【図５】図１の発行／購読メッセージング・システムのメッセージ・サブスクライバ・アプリケーション・プログラムによって実行される処理を示す流れ図である。
【図６】図１の発行／購読メッセージング・システムのメッセージ・サブスクライバ・アプリケーション・プログラムによって実行される処理を示す流れ図である。
【図７】図１の発行／購読メッセージング・システムのメッセージ・サブスクライバ・アプリケーション・プログラムによって実行される処理を示す流れ図である。
【図８】図１の発行／購読メッセージング・システムのメッセージ・サブスクライバ・アプリケーション・プログラムによって実行される処理を示す流れ図である。
【発明を実施するための形態】
【００１７】
図１を参照すると、コンピュータ化された発行／購読メッセージング・システム１０１は、ネットワーク１０８によって相互に接続され、１つまたは複数のアプリケーション・プログラムを実行するための処理環境を提供するように構成されたオペレーティング・システム１０９をそれぞれが搭載した６つのコンピュータ１０２、１０３、１０４、１０５、１０６、１０７を含む。第１のコンピュータ１０２は、メッセージ・パブリッシャ・アプリケーション・プログラム（パブリッシャ）１１０を実行するように構成される。第２、第３、第４、および第５のコンピュータ１０３、１０４、１０５、１０６は、メッセージ・ブローカＡ、Ｂ、Ｃ、およびＤをそれぞれ提供するメッセージ・ブローカ・アプリケーション・プログラム（ブローカ）１１１を実行するようにそれぞれ構成される。第６のコンピュータ１０７は、メッセージ・サブスクライバ・アプリケーション・プログラム（サブスクライバ）１１２を実行するように構成される。この実施形態においては、発行／購読メッセージング・システム１０１用のソフトウェアは、ＩＢＭのＩＢＭ（Ｒ）ＷｅｂＳｐｈｅｒｅ（Ｒ）メッセージ・ベース・ミドルウェア・システムによって提供される。ＩＢＭおよびＷｅｂＳｐｈｅｒｅは、世界中の多くの管轄機関に登録されたＩＢＭの商標である。
【００１８】
図２を参照すると、この実施形態において、パブリッシャ１１０は、ブローカＡ  １１１にメッセージを発行するように構成される。ブローカＡ  １１１は、サブスクライバ１１２からの要求に応じて、残りの３つのブローカＢ、ＣおよびＤ  １１１を介して高信頼性高可用性（ＨＲＨＩ）の購読を提供するように構成される。パブリッシャ１１０は、そのパブリッシャ１１０が発行するメッセージの順番で各メッセージに一意のシーケンシャル・メッセージ識別子（ＳＭＩ）を割り振るようにさらに構成される。ＳＭＩは、所与の購読に関するメッセージの順番で任意のメッセージを一意に特定するように構成され、所与のメッセージに対して順番が前のまたは後のメッセージを特定するための手段も提供する。
【００１９】
ＨＲＨＩブローカＢ、Ｃ、およびＤ  １１１は、ＨＲＨＩの購読を提供し、ＨＲＨＩの購読に関する未読メッセージを記憶するための関連するメッセージ・キュー２０１を保有するように構成される。サブスクライバ１１２からブローカＢ、Ｃ、およびＤ  １１１のうちの所与の１つに対する要求に応じて、関連するブローカ１１１は、要求されたメッセージを提供するように構成される。さらに、ブローカ１１１は、送信されたメッセージに関する関連するＳＭＩを、そのブローカ１１１の関連するメッセージ・キュー２０１に関する状態変数として記憶するように構成される。言い換えると、保存されるＳＭＩは、所与のブローカ１１１上のＨＲＨＩの購読の状態を示す。それぞれの順番に保存されるＳＭＩは、前の保存されたすべてのＳＭＩを上書きする。ＳＭＩは、ブローカ１１１に何らかの故障が発生した場合に修復可能であるように関連するブローカ１１１の永続的メモリに保存される。所与のメッセージに関する関連するＳＭＩは、要求元のサブスクライバ１１２がメッセージを正常に受信した場合にのみ保存される。この実施形態において、所与のメッセージの送信および関連するＳＭＩの保存は、単一の処理単位で、つまり、単一のトランザクションとして関連するブローカ１１１によって処理されるように構成される。
【００２０】
サブスクライバ１１２は、所定のプロトコルにしたがって次々にブローカＢ、Ｃ、およびＤ  １１１のそれぞれからのＨＲＨＩの購読に関するメッセージを要求するように構成される。この実施形態においては、サブスクライバは、ラウンド・ロビン・プロトコルを使用する。サブスクライバ１１２は、最も新しく正常に受信されたメッセージのＳＭＩのコピーを記憶するようにさらに構成される。ＳＭＩのサブスクライバのコピーは、サブスクライバ１１２に関するＨＲＨＩの購読の状態を示す。サブスクライバ１１２は、記憶されたＳＭＩを用いて、ラウンド・ロビン・メッセージ要求プロトコルにしたがってブローカＢ、Ｃ、およびＤ  １１１のうちの次のブローカから要求するべき、ＨＲＨＩの購読の順番が次のメッセージを決定する。サブスクライバ１１２は、所与のメッセージの成功した受信に応じてブローカＢ、Ｃ、およびＤ  １１１に破棄メッセージを送信することによってメッセージ・キュー２０１を管理するようにさらに構成される。言い換えると、サブスクライバ１１２は、所与のメッセージを受信するとき、そのメッセージのＳＭＩによって受信されたメッセージを特定するすべてのブローカＢ、Ｃ、およびＤ  １１１に破棄メッセージを発行する。そのような破棄メッセージに応じて、ブローカＢ、Ｃ、およびＤ  １１１のそれぞれは、破棄メッセージで受信されたＳＭＩに対応するメッセージ以前の、それらのブローカ１１１のそれぞれのメッセージ・キュー２０１のすべてのメッセージを破棄するように構成される。
【００２１】
図２は、サブスクライバ１１２によるＨＲＨＩの購読の初期化時の、ＨＲＨＩの購読を提供するブローカＢ、Ｃ、およびＤ  １１１のそれぞれのメッセージ・キュー２０１の状態と、さらに、サブスクライバ１１２の状態とを示す。起動時に、サブスクライバ１１２は、この実施形態においてはＨＲＨＩの購読を提供するためのブローカの事前に構成された組であるブローカＢ、Ｃ、およびＤ  １１１への接続を行う。サブスクライバ１１２は、そのサブスクライバ１１２自体の状態と、ブローカＢ、Ｃ、およびＤ  １１１のそれぞれの状態とが未定義であると判定する。したがって、図２に示された状態から進むとき、サブスクライバは、第１のメッセージ、つまり、ブローカＢ、Ｃ、およびＤ  １１１のうちの選択された１つ、例えばブローカＢ  １１１からのメッセージＡを読む。メッセージＡがブローカＢ  １１１から正常に受信されると、サブスクライバは、メッセージＡに関する「１」であるＳＭＩを記録する。次に、サブスクライバは、ＳＭＩ＝１とした破棄メッセージをブローカＢ、Ｃ、Ｄ  １１１に送信する。それから、サブスクライバ１１２は、ラウンド・ロビン・プロトコルを用いて、順番の中で次のメッセージ、つまりＳＭＩ＝２であるメッセージＢを取得するべきブローカＣ、Ｄ  １１１のうちの次のブローカを選択する。そして、プロセスは、同様にして継続する。
【００２２】
図３は、サブスクライバ１１２が故障した後に再始動したときの、ＨＲＨＩの購読を提供するブローカＢ、Ｃ、およびＤ  １１１のそれぞれのメッセージ・キュー２０１の状態と、さらに、サブスクライバ１１２の状態とを示す。そのような故障の結果として、サブスクライバ１１２の故障前の状態である最後に受信されたＳＭＩの非永続的コピーはもはや利用できない。したがって、再始動に応じて、サブスクライバ１１２は、ブローカＢ、Ｃ、およびＤ  １１１に再接続し、次に、それぞれの記憶されたＳＭＩの形態の関連するメッセージ・キュー２０１の状態のそれらのブローカ１１１のコピーをそれぞれのブローカ１１１に問い合わせるように構成される。図３の例においては、５である最も大きなＳＭＩが、ブローカＢ  １１１に記憶されている。これに応じて、サブスクライバ１１２は、ＳＭＩ＝５を示すデータを含む破棄メッセージをブローカＢ、Ｃ、Ｄ  １１１に送信する。それから、サブスクライバ１１２は、次のブローカ１１１を選択するためにラウンド・ロビン・プロトコルを用いてメッセージを要求することを再開し、動作を再開する。
【００２３】
図４は、ブローカＤ  １１１への接続またはブローカＤ  １１１自体がクラッシュし、サブスクライバ１１２がもはやブローカＤ  １１１からメッセージを取得できなくなった後の、ＨＲＨＩの購読を提供するブローカＢ、Ｃ、およびＤ  １１１のそれぞれのメッセージ・キュー２０１の状態と、さらに、サブスクライバ１１２の状態とを示す。ブローカＤがダウンしていた間、サブスクライバ１１２は、その他のブローカＢ、Ｃ  １１１から途切れていない一連のメッセージを受信し続けていた。したがって、ブローカＤ  １１１の状態およびメッセージ・キュー２０１は、残りのブローカ１１１と同期していない。したがって、ブローカＤが再び利用可能になることに応じて、サブスクライバ１１２は、サブスクライバの現在の状態、つまりＳＭＩ＝５を含む破棄メッセージを再接続されたブローカＤ  １１１に送信するように構成される。破棄メッセージは、メッセージ２から５までを破棄し、ブローカの状態をＳＭＩ＝５に設定することによって、再接続されたブローカＤ  １１１のメッセージ・キュー２０１および状態を再び同期させる効果がある。
【００２４】
要するに、サブスクライバ１１２が実行されたままである場合、ブローカ１１１のうちの１つが実行されたままである限り、途切れていない一連のメッセージが、サブスクライバ１１２によって重複なく受信される。サブスクライバ１１２が故障する場合は、その後の再始動時に、最新のＳＭＩを有するブローカ１１１が実行されている限り、サブスクライバ１１２は、途切れていない一連のメッセージを重複なく受信することになる。
【００２５】
ＨＲＨＩの購読を設定するときにサブスクライバ１１２によって実行される処理が、以降、図５の流れ図を参照してさらに説明される。処理は、サブスクライバ・アプリケーション・プログラム１１２の起動によって開始され、処理は、ステップ５０２に進む。ステップ５０２において、ＨＲＨＩの購読のために、接続されたブローカ１１１に要求が送信され、処理はステップ５０３に進む。ステップ５０３において、ＨＲＨＩの購読を提供するブローカ１１１の組を特定するデータの受信に応じて、それぞれのブローカ１１１への接続が行われ、処理はステップ５０４に進む。ステップ５０４において、サブスクライバの状態がゼロに初期化され（ＳＭＩ＝０）、ＨＲＨＩブローカ１１１の組のうちの第１のブローカ１１１が、ラウンド・ロビン・プロトコルにしたがって選択され、処理はステップ５０５に進む。ステップ５０５において、この実施形態においてはＳＭＩ＝１を有する、順番の中で第１のメッセージが、選択されたブローカから要求され、処理はステップ５０６に進む。ステップ５０６において、要求されたメッセージの正常な受信および肯定応答に応じて、新しい状態がサブスクライバ１１２において記録され、処理はステップ５０７に進む。ステップ５０７において、メッセージに関連するＳＭＩによって最後に読まれたメッセージを特定する破棄メッセージが、ＨＲＨＩブローカ１１１の組に送信され、処理はステップ５０８に進む。ステップ５０８において、ラウンド・ロビン・プロトコルにしたがって次のブローカが選択され、処理はステップ５０５に進み、上述のように進行する。
【００２６】
サブスクライバ１１２からのメッセージ要求に応じてブローカ１１１のうちの１つによって実行される処理が、以降、図６の流れ図を参照してさらに説明される。処理は、ＨＲＨＩの購読に関するメッセージ要求の受信によってステップ６０１において開始され、処理は、ステップ６０２に進む。ステップ６０２において、要求されたメッセージが要求元に送信され、処理はステップ６０３に進む。ステップ６０３において、要求元によるメッセージの受信の肯定応答が待たれ、受信されると、処理はステップ６０４に進む。ステップ６０４において、正常に送信されたメッセージのＳＭＩが、関連するＨＲＨＩメッセージ・キュー２０１の状態として記録される。次いで、処理はステップ６０５に進み、終了する。
【００２７】
故障またはクラッシュの後で再始動するときにサブスクライバ１１２によって実行される処理が、以降、図７の流れ図を参照してさらに説明される。処理は、サブスクライバ・アプリケーション・プログラム１１２の再始動によって開始され、処理は、ステップ７０２に進む。ステップ７０２において、ＨＲＨＩブローカ１１１の組への接続が再確立され、処理はステップ７０３に進む。ステップ７０３において、ＨＲＨＩブローカ１１１のそれぞれの関連するキュー２０１の状態が判定され、処理はステップ７０４に進む。ステップ７０４において、最新のブローカの状態、つまり、ブローカの組からの最も大きなＳＭＩが特定され、処理はステップ７０５に進む。ステップ７０５において、最新のブローカの状態のＳＭＩを特定する破棄メッセージが、ＨＲＨＩブローカ１１１の組に送信され、処理はステップ７０６に進む。ステップ７０６からステップ７０９まで、処理は、等価なステップ５０５から５０８までに関して図５を参照して上で説明されたように進む。
【００２８】
ＨＲＨＩブローカ１１１への接続の喪失に応じてサブスクライバ１１２によって実行される処理が、以降、図８の流れ図を参照してさらに説明される。処理は、ＨＲＨＩブローカ１１１への接続の喪失によって開始され、処理は、ステップ８０２に進む。ステップ８０２において、処理は、ステップ８０３に進む前に、切断されたブローカが利用可能になるのを待つ。ステップ８０３において、ブローカ１１１への接続が再確立され、処理はステップ８０４に進む。ステップ８０４において、サブスクライバ１１２の現在の状態（ＳＭＩ）を特定する破棄メッセージが、再接続されたブローカ１１１に送信される。次いで、処理はステップ８０５に進み、終了する。
【００２９】
さらなる実施形態において、ブローカは、すべての破棄を協力して処理する。言い換えると、各ブローカは、破棄する機能をサブスクライバからなくすために、ＨＲＨＩブローカの組のその他のブローカにそのブローカが破棄することを伝えることができる。ブローカは、そのブローカの故障またはサブスクライバへのそのブローカの接続の故障の後に再接続すると、ＨＲＨＩの組のその他のブローカに問い合わせて、破棄すべき適切なメッセージを決定するように構成される。サブスクライバが再始動するときは、破棄プロセスは、図７を参照して上で説明されたように進行する。
【００３０】
別の実施形態においては、サブスクライバからブローカへのＨＲＨＩの購読の要求に応じて、ブローカは、新規のＨＲＨＩブローカの組をオン・ザ・フライで集めるように構成される。
【００３１】
さらなる実施形態においては、中間ブローカが、要求元のサブスクライバにＨＲＨＩの購読を提供するように構成される。中間ＨＲＨＩブローカは、要求された購読を提供するＨＲＨＩブローカの組の処理からサブスクライバを分離するように構成される。中間ＨＲＨＩブローカは、実質的に、上述のサブスクライバの機能を有する中間サブスクライバとして働く。要求元のサブスクライバは、関連するシステムに関する標準的なサブスクライバの機能以外の追加的な機能を持つ必要がない。例えば、中間ＨＲＨＩブローカは、ブローカ選択プロトコルを実行し、関連する破棄メッセージによってＨＲＨＩブローカの関連するＨＲＨＩメッセージ・キューを管理する。末端のサブスクライバは、ＨＲＨＩの購読が提供されていることを知る必要がないか、または高信頼性の購読を明確に選択するためのオプションを提供される可能性がある。
【００３２】
別の実施形態においては、サブスクライバは、再始動時にすべてのブローカが利用可能でない場合、機能しないように構成される可能性がある。これは、特定の故障の場合にサブスクライバが何らかの重複するメッセージを受信する可能性を回避する。その故障の場合に、サブスクライバ１１２が、１つのブローカ１１１からのメッセージを読んだ直後、次のブローカ１１１に連絡してそのメッセージを破棄する前に故障する場合、これは、最新のＳＭＩが１つのブローカにしかない結果となる可能性がある。再始動時にその特定のブローカが利用可能でない場合、重複したメッセージが読まれる。
【００３３】
本発明の実施形態は、軽量で高可用性の発行／購読メッセージングを提供する。クライアントに状態を記憶するのではなく、実施形態は、ブローカの永続的ストレージを用いて最後のシーケンス番号を保持し、ブローカ上で単純なトランザクションしか必要としない。これは、サブスクライバとブローカの間の複雑で同期されたトランザクションを回避する。有効なメッセージがブローカから読まれるたびに、そのメッセージのシーケンス番号が、その同じブローカの永続的ストレージに、１つの処理単位で、関連する購読またはトピックに関連する場所に書き戻される。現在のシーケンス番号以下のシーケンス番号を有するすべての他のメッセージが、ブローカから破棄される。ブローカ・アプリケーションが、メッセージを破棄するときに実際にメッセージ全体を取得する必要はなく、シーケンス番号だけが、メッセージが必要とされているか否かを判断するために要求される。したがって、大量のデータに関して、冗長なメッセージを破棄するオーバーヘッドが削減される。ブローカが利用できなくなる場合、その他のブローカのいずれかが、次のメッセージを取得し、最も新しい有効なシーケンス番号を記憶するために使用され得る。少なくとも１つのブローカが利用可能である限り、データの喪失はなく、メッセージの順序が維持される。サブスクライバが切断されるか、またはすべてのブローカが故障する場合、再接続すると、サブスクライバは、最も大きなシーケンス番号に関してすべてのブローカの永続的ストレージを調べ、そのシーケンス番号を、再びメッセージの受信を開始するための開始点として使用する。サブスクライバが購読を止める場合、購読中止メッセージがブローカの間で送信される。購読中止メッセージが送信されるときにブローカが利用可能でない場合、ブローカは、再始動時に購読中止メッセージを処理するように構成される。
【００３４】
当業者によって理解されるであろうように、本発明の実施形態は、任意の好適な発行／購読システムを用いて実装され得る。
【００３５】
本発明の一部またはすべてを具現化する装置は、本発明の実施形態の一部またはすべてを提供するように構成されたソフトウェアを有する汎用デバイスである可能性があることが当業者に理解されるであろう。デバイスは、単一のデバイスまたはデバイスのグループである可能性があり、ソフトウェアは、単一のプログラムまたはプログラムの組である可能性がある。さらに、本発明を実装するために使用されるソフトウェアのいずれかまたはすべては、ソフトウェアが１つまたは複数のデバイスにロードされ得るように任意の好適な送信または記憶手段を介して伝達される可能性がある。
【００３６】
本発明がその実施形態の説明によって示され、実施形態がかなり詳細に説明されたが、出願人は、添付の特許請求の範囲の範囲をそのような詳細に制限するか、または何らかの形で限定することを意図していない。さらなる利点および修正が、当業者には容易に分かるであろう。したがって、本発明は、本発明のより広い態様において、代表的な装置および方法、ならびに図示され、説明された例示的な例の特定の詳細に限定されない。ゆえに、出願人の包括的な発明の概念の範囲を逸脱することなく、そのような詳細から離れることができる。
【図１】
2014515152.tif 000003
【図２】
2014515152.tif 000004
【図３】
2014515152.tif 000005
【図４】
2014515152.tif 000006
【図５】
2014515152.tif 000007
【図６】
2014515152.tif 000008
【図７】
2014515152.tif 000009
【図８】
2014515152.tif 000010
【国際調査報告】
2014515152.tif 000011