(57)【要約】  メッセージブローカーを用いてネットワーク上でクライアントに出版−購読メッセージを配信する方法及び装置。第１クライアントは、第２クライアントをその継承者として宣言するメッセージをメッセージブローカーに送るよう構成される。第１クライアント装置が前記メッセージブローカーから切断されている場合、メッセージブローカーは、第１クライアントに送信されるものとされる一つ以上のメッセージを前記第２クライアントに送るよう構成される。第２クライアントは、第１クライアントの代わりにこれらのメッセージを受信し、処理してもよい。
2020524966.tif 000002
【特許請求の範囲】
【請求項１】
出版−購読メッセージをネットワーク上でメッセージブローカーによりクライアントに配信する方法であって、
前記メッセージブローカーにより、第１クライアントから、第２クライアントを前記第１クライアントの継承者として特定するメッセージを受信し、
前記第１クライアントが前記メッセージブローカーから切断されていることを判定し、
前記第１クライアントが前記メッセージブローカーから切断されているとの判定に応じ、前記メッセージブローカーにより、前記第１クライアントに送信されるものとされる一つ以上のメッセージを前記第２クライアントに送ることを特徴とする方法。
【請求項２】
請求項１に記載の方法であって、前記第１クライアントが前記メッセージブローカーから切断されることの判定工程は、前記第１クライアントが前記メッセージブローカーから異常切断されていることの判定工程を含むことを特徴とする方法。
【請求項３】
請求項１又は２に記載の方法であって、前記一つ以上のメッセージは、ＭＱＴＴ（Ｍｅｓｓａｇｅ  Ｑｕｅｕｅ  Ｔｅｌｅｍｅｔｒｙ  Ｔｒａｎｓｐｏｒｔ）メッセージであることを特徴とする方法。
【請求項４】
請求項１から請求項３のいずれか一項に記載の方法であって、前記第１クライアントから前記メッセージを受信する前に、前記第２クライアントを特定し、
前記第２クライアントから、前記第２クライアントが他のクライアントに送信されることになっているメッセージを受信するのに利用可能であることを示すメッセージを受信し、
前記第１クライアントに、前記第１クライアントに送信されることになっている前記一つ以上のメッセージを受信するのに前記第２クライアントが利用可能である旨を送信することを特徴とする方法。
【請求項５】
請求項４に記載の方法であって、前記第２クライアントからの前記メッセージは前記第２クライアントのベンダーＩＤを含み、前記第１クライアントに前記第２クライアントが利用可能である旨を送信する工程は、前記第２クライアントのベンダーＩＤが前記第１クライアントのベンダーＩＤと一致するとの判定に応じて実行されることを特徴とする方法。
【請求項６】
請求項４または５に記載の方法であって、
一つ以上のクライアントに問い合わせて、前記第１クライアントに送信されることになっている前記一つ以上のメッセージを受信するのに利用可能であることを判定する前記第１クライアントからのポーリングメッセージの受信に応じて、前記第１クライアントに前記第２クライアントが利用可能である旨を送信することを特徴とする方法。
【請求項７】
請求項１から請求項６のいずれか一項に記載の方法であって、前記一つ以上のメッセージは、前記第１クライアントによる前記一つ以上のメッセージのクラスの購読の表示によって前記第１クライアントに送られるものとされ、前記表示は、前記メッセージブローカーによって記憶されることを特徴とする方法。
【請求項８】
請求項１から請求項７のいずれか一項に記載の方法であって、第１クライアントからの第２クライアントを特定する前記メッセージは、前記第２クライアントのＭＡＣ（ｍｅｄｉａ  ａｃｃｅｓｓ  ｃｏｎｔｒｏｌ）アドレスを含むことを特徴とする方法。
【請求項９】
クライアントへの出版−購読メッセージの配信を制御する方法であって、
第１クライアントにより、第２クライアントを第１クライアントの継承者として特定するメッセージブローカーに、前記メッセージブローカーが、前記第１クライアントは前記メッセージブローカーから切断されたことを判定するのに応じて、前記第１クライアントに送信されるものとされる一つ以上のメッセージを前記第２クライアントへ送らせる指示を含むメッセージを送信することを特徴とする方法。
【請求項１０】
コンピュータによって実行された際、前記コンピュータが請求項１から９のいずれか一項に記載の工程を実行するよう構成される指示を含むコンピュータプログラム。
【請求項１１】
クライアントに出版−購読メッセージを配信するよう構成されるメッセージブローカーであって、少なくとも一つのプロセッサとコンピュータプログラムコードを含む少なくとも一つのメモリとを備え、前記少なくとも一つのメモリと前記コンピュータプログラムコードは、前記少なくとも一つのプロセッサとともに、前記メッセージブローカーに少なくとも、
前記メッセージブローカーの第１クライアントが前記メッセージブローカーから切断されていることを判定させ、
前記第１クライアントが前記メッセージブローカーから切断されているとの判定に応じて、前記第１クライアントに送信されるものとされる一つ以上のメッセージを、前記第１クライアントからのメッセージ中で前記第１クライアントの継承者として特定された第２クライアントに送らせることを特徴とするメッセージブローカー。
【請求項１２】
クライアントへの出版−購読メッセージの配信を制御するよう構成される第１クライアント装置であって、少なくとも一つのプロセッサとコンピュータプログラムコードを含む少なくとも一つのメモリとを備え、前記少なくとも一つのメモリと前記コンピュータプログラムコードは、前記少なくとも一つのプロセッサとともに、前記第１クライアント装置に少なくとも、
第２クライアントを第１クライアントの継承者として特定するメッセージブローカーに、前記メッセージブローカーが、前記第１クライアントは前記メッセージブローカーから切断されたことを判定するのに応じて、前記第１クライアントに送信されるものとされる一つ以上のメッセージを前記第２クライアントへ送らせる指示を含むメッセージを送るようにさせることを特徴とする第１クライアント装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本願開示は、メッセージブローカーを用いてネットワーク上でクライアントに出版−購読（ｐｕｂｌｉｓｈ−ｓｕｂｓｃｒｉｂｅ）メッセージを配信する方法及び装置に関する。
【背景技術】
【０００２】
通信システムは、ユーザ装置、マシン型端末（ｍａｃｈｉｎｅ−ｌｉｋｅ  ｔｅｒｍｉｎａｌｓ）、サーバ、その他のノード等の二つ以上の装置間で情報を伝達する通信経路を提供することで、これら二つ以上の装置間の通信を可能とする設備であるとみなすことができる。通信システムは、例えば、通信ネットワークと一つ以上の互換性のある通信装置とにより提供することができる。この通信は、例えば音声データを伝えるデータ通信、電子メール（ｅメール）、テキストメッセージ、マルチメディア及び／又はコンテンツデータ通信等を含んでよい。
【０００３】
装置間でメッセージを交換するのに実行可能な具体的モデルの一つが、出版−購読モデル（ｐｕｂｌｉｓｈ−ｓｕｂｓｃｒｉｂｅ  ｐａｔｔｅｒｎ）である。
【発明の概要】
【０００４】
第１の側面によれば、出版−購読メッセージをネットワーク上でメッセージブローカーによりクライアントに配信する方法であって、前記メッセージブローカーにより、第１クライアントから、第２クライアントを前記第１クライアントの継承者として特定するメッセージを受信し、前記第１クライアントが前記メッセージブローカーから切断されていることを判定し、前記第１クライアントが前記メッセージブローカーから切断されているとの判定に応じ、前記メッセージブローカーにより、前記第１クライアントに送信されるものとされる一つ以上のメッセージを前記第２クライアントに送る方法が提供される。
【０００５】
いくつかの例において、前記第１クライアントが前記メッセージブローカーから切断されることの判定工程は、前記第１クライアントが前記メッセージブローカーから異常切断されていることの判定工程を含む。
【０００６】
いくつかの例において、前記一つ以上のメッセージは、ＭＱＴＴ（Ｍｅｓｓａｇｅ  Ｑｕｅｕｅ  Ｔｅｌｅｍｅｔｒｙ  Ｔｒａｎｓｐｏｒｔ）メッセージである。
【０００７】
いくつかの例において、前記方法では、前記第１クライアントから前記メッセージを受信する前に前記第２クライアントを特定し、前記第２クライアントから、前記第２クライアントが他のクライアントに送信されることになっているメッセージを受信するのに利用可能であることを示すメッセージを受信し、前記第１クライアントに、前記第１クライアントに送信されることになっている前記一つ以上のメッセージを受信するのに前記第２クライアントが利用可能である旨を送信する。
【０００８】
いくつかの例において、前記第２クライアントからの前記メッセージは前記第２クライアントのベンダーＩＤを含み、前記第１クライアントに前記第２クライアントが利用可能である旨を送信する工程は、前記第２クライアントのベンダーＩＤが前記第１クライアントのベンダーＩＤと一致するとの判定に応じて実行される。
【０００９】
いくつかの例において、前記方法では、一つ以上のクライアントに問い合わせて、前記第１クライアントに送信されることになっている前記一つ以上のメッセージを受信するのに利用可能であることを判定する前記第１クライアントからのポーリングメッセージの受信に応じて、前記第１クライアントに前記第２クライアントが利用可能である旨を送信する。
【００１０】
いくつかの例において、前記一つ以上のメッセージは、前記第１クライアントによる前記一つ以上のメッセージのクラスの購読の表示によって前記第１クライアントに送られるものとされ、前記表示は、前記メッセージブローカーによって記憶される。
【００１１】
いくつかの例において、第１クライアントからの第２クライアントを特定する前記メッセージは、前記第２クライアントのＭＡＣ（ｍｅｄｉａ  ａｃｃｅｓｓ  ｃｏｎｔｒｏｌ）アドレスを含む。
【００１２】
第２の側面によれば、クライアントへの出版−購読メッセージの配信を制御する方法であって、第１クライアントにより、第２クライアントを第１クライアントの継承者として特定するメッセージブローカーに、前記メッセージブローカーが、前記第１クライアントは前記メッセージブローカーから切断されたことを判定するのに応じて、前記第１クライアントに送信されるものとされる一つ以上のメッセージを前記第２クライアントへ送らせる指示を含むメッセージを送信する方法が提供される。
【００１３】
第３の側面によれば、コンピュータによって実行された際、前記コンピュータが第１または第２の側面の工程を実行するよう構成される指示を含むコンピュータプログラムが提供される。
【００１４】
第４の側面によれば、クライアントに出版−購読メッセージを配信するよう構成されるメッセージブローカーであって、少なくとも一つのプロセッサとコンピュータプログラムコードを含む少なくとも一つのメモリとを備え、前記少なくとも一つのメモリと前記コンピュータプログラムコードは、前記少なくとも一つのプロセッサとともに、前記メッセージブローカーに少なくとも、前記メッセージブローカーの第１クライアントが前記メッセージブローカーから切断されていることを判定させ、前記第１クライアントが前記メッセージブローカーから切断されているとの判定に応じて、前記第１クライアントに送信されるものとされる一つ以上のメッセージを、前記第１クライアントからのメッセージ中で前記第１クライアントの継承者として特定された第２クライアントに送らせるメッセージブローカーが提供される。
【００１５】
第５の側面によれば、クライアントへの出版−購読メッセージの配信を制御するよう構成される第１クライアント装置であって、少なくとも一つのプロセッサとコンピュータプログラムコードを含む少なくとも一つのメモリとを備え、前記少なくとも一つのメモリと前記コンピュータプログラムコードは、前記少なくとも一つのプロセッサとともに、前記第１クライアント装置に少なくとも、第２クライアントを第１クライアントの継承者として特定するメッセージブローカーに、前記メッセージブローカーが、前記第１クライアントは前記メッセージブローカーから切断されたことを判定するのに応じて、前記第１クライアントに送信されるものとされる一つ以上のメッセージを前記第２クライアントへ送るようにさせる指示を含むメッセージを送る第１クライアント装置が提供される。
【図面の簡単な説明】
【００１６】
本願開示の理解を促進し、どのように実施例が効果を奏するのかを示すため、例示として添付の図面が参照される。
【００１７】
【図１】出版−購読通信システムの例を模式的に示す図である。
【図２】通信装置の例を模式的に示す図である。
【図３】出版−購読通信システムの例を模式的に示す図である。
【図４】メッセージブローカーに記憶されるクライアント関連データの例を示す図である。
【図５】本願開示の例におけるメッセージブローカーで行われる例示的方法を示す図である。
【図６】本願開示の例における第１クライアントで行われる例示的方法を示す図である。
【図７】本願開示の例における第２クライアントで行われる例示的方法を示す図である。
【図８】出版−購読通信システムの例を模式的に示す図である。
【発明を実施するための形態】
【００１８】
本願明細書において、便宜上かつ慣習上、「クライアント」、「パブリッシャ」、「サブスクライバー」、「メッセージブローカー」等と記載されるものは、文脈上他の意味で解釈される場合を除き、「クライアント装置」、「パブリッシャ装置」、「サブスクライバー装置」、「メッセージブローカー装置」、等を意味するものと解釈されるべきである。
【００１９】
上述のように、装置間でメッセージを交換するのに実行可能な具体的モデルの一つが、いわゆる出版−購読モデルである。この中では、メッセージを送信しているクライアントは、多くの通信システムで一般に行われているのとは異なり、当該メッセージを特定の受信装置に直接送信するようにプログラムすることによってメッセージを送信するわけではない。代わりに、パブリッシャとして知られるクライアントがメッセージを送信する際、このクライアントは、メッセージが属する特定の「クラス」（又は「トピック」）の表示（ｉｎｄｉｃａｔｉｏｎ）とともに当該メッセージが送信されるようにプログラムする。このメッセージは、パブリッシャにより、サブスクライバーとして知られる当該パブリッシャによって送信される特定のクラスのメッセージの購読を登録した全クライアントのリストを有するメッセージブローカーに送信される。その後、メッセージブローカーは当該メッセージを、クラスによって示されたサブスクライバーに送信する。特定のクラスのメッセージの購読を登録するため、クライアントはメッセージブローカーに購読メッセージを送信してもよく、メッセージブローカーは当該クライアントが当該クラスのメッセージの受信を購読した旨の表示を記憶し、パブリッシャから受信する将来のメッセージをすべてクライアントに向けて転送することとなる。
【００２０】
出版−購読ベースのメッセージングでしばしば用いられるプロトコルの一つが、ＴＣＰ／ＩＰプロトコル上で用いられる軽量なメッセージングプロトコルであるＭＱＴＴ（Ｍｅｓｓａｇｅ  Ｑｕｅｕｉｎｇ  Ｔｅｌｅｍｅｔｒｙ  Ｔｒａｎｓｐｏｒｔ）プロトコルである。ＭＱＴＴは、特に性能の限られた装置及び低帯域幅、高遅延又は信頼性の低いネットワークのために特に設計される。設計原則は、信頼性及びある程度確実な配信を確保しつつ、ネットワーク帯域及び装置リソース要件を最小化することである。これらの原則により、このプロトコルは、近年普及している「Ｍ２Ｍ（ｍａｃｈｉｎｅ−ｔｏ−ｍａｃｈｉｎｅ）」または「モノのインターネット」の世界で接続された装置、及び帯域及びバッテリーパワーが貴重であるモバイル装置での用途に理想的である。
【００２１】
一般に、本明細書中で、ＩｏＴ装置とは、アドレス可能なインタフェース（例：インターネットプロトコル（ＩＰ）アドレス、Ｂｌｕｅｔｏｏｔｈ（登録商標）識別子（ＩＤ）、近距離無線通信（ＮＦＣ）ＩＤ等）を有し、有線または無線接続を介して一つ以上の他の装置に情報を伝達可能な装置である。ＩｏＴ装置は、一般に例えば、冷蔵庫、オーブン、電子レンジ、冷凍庫、食器洗浄機、洗濯機、衣類乾燥機、炉（ｆｕｒｎａｃｅｓ）、エアコン、温度自動調節器、テレビ等の家電製品、照明機器、真空掃除機、スプリンクラー、電気メータ、ガスメータ、等を含み、またはこれらに内蔵される。ＩｏＴ装置は、例えば、ＩｏＴ装置が温度、湿度、圧力、光量、汚染度等のセンサである場合など、主電源がない場所／状況、またはＩｏＴ装置が主電源に適合しない場所／状況に配置される可能性がある。
【００２２】
出版−購読システムにおいて、クライアントは、メッセージブローカーと異常切断される（ｕｎｇｒａｃｅｆｕｌｌｙ  ｄｉｓｃｏｎｎｅｃｔｅｄ）場合がある。しかし、メッセージブローカーは、この異常切断されたクライアントが購読しているクラスのメッセージをさらに受信する可能性がある。メッセージブローカーはこれらのクライアント宛てのメッセージを、単に廃棄可能してもよい。しかし、この場合には、これらのメッセージは処理されないままである。
【００２３】
実施例を詳細に説明する前に、記載される実施例に内在する技術の理解を促進するために、出版−購読通信システムの一般原理と適切な通信装置とを、図１及び２を参照して簡単に説明する。
【００２４】
図１は、出版−購読通信システムの例を示す。メッセージブローカー１０２は、複数のクライアント装置１０４、１０６、１０８、１１０と通信するのに用いられるインタフェース１１２を備える。このメッセージブローカー１０２は、例えばサーバであってもよい。インタフェース１１２は、有線及び／又は無線インタフェースを介してクライアント装置から信号を受信し、有線及び／又は無線インタフェースを介してクライアント装置に信号を送信する送受信機を備えてもよい。無線接続のため、送受信機は、例えば無線部と対応するアンテナ装置とを備えてもよい。このアンテナ装置は、メッセージブローカーの内部、または外部に配置可能である。
【００２５】
インタフェース１１２は、例えばメッセージがクライアント装置によりメッセージブローカーに送信される際に当該メッセージを入力する入力待ちまたは同時入力ノードであってもよい入力機構を備えてもよい。発行された（ｐｕｂｌｉｓｈｅｄ）メッセージは、コントローラ１１４によって入力機構から取得され、特にメッセージの送信先となるクライアント装置を判定するために処理される。メッセージブローカー１０２からメッセージが送受信される複数のインタフェースがあってもよい。
【００２６】
受信したメッセージが示すクラスにより、パブリッシャとサブスクライバーとの間のメッセージ（発行物）の配信に対するキーが与えられる。ブローカーは、発行されたメッセージ上のクラス文字列と、当該クラス文字列を含むメッセージの受信を購読しているクライアントのリストとを照合するよう構成される。各メッセージクラスについてのクライアントのリストは、記憶装置１１６中に保持されてもよい。クラス文字列とクライアントとを照合するため、照合エンジン１１８をメッセージブローカーに設けてもよい。クライアント装置をサブスクライバーとして登録する際、（入力待ちまたはその他の入力機構であってもよい）メッセージの受信手段及び受信を希望するメッセージのクラスの表示が特定されてもよい。
【００２７】
一例では、クライアント装置は「温度」、「圧力」、「湿度」、「光強度」、等のクラス文字列を含むメッセージを受信することを希望する旨の購読請求メッセージを送信してもよい。メッセージブローカーは、インタフェースでこのようなメッセージを受信し、コントローラで処理して、クラス文字列「温度」を登録していたクライアント装置を記憶装置１１６内で更新すべきことを判定する。コントローラは、当該クラス文字列を登録したクライアント装置のリストを記憶装置１１６に書き込んで更新するよう構成される。
【００２８】
その後、クライアント１０４、１１０がクラス「温度」のメッセージ受信を購読した場合、クライアント１０６（すなわち、この場合のパブリッシャ）がクラス「温度」のメッセージをメッセージブローカーに送信し、このメッセージはインタフェースで受信されることを想定する。照合エンジン１１８は、クラス「温度」を、このクラスのサブスクライバーとして登録したクライアントのリストと照合し、これにより、クライアント装置１０４、１１０がサブスクライバーとして登録されていることを判定する。コントローラは、このメッセージを処理して、例えば適切なヘッダを挿入するなどしてクライアント装置１０４、１１０に送信されるようプログラムする。インタフェースは、その後メッセージのコピーをクライアント装置１０４、１１０に送信する。クライアント装置１０６がパブリッシャとされるものの、当業者にとって、クライアント装置１０６が一つ以上のクラスのメッセージのサブスクライバーとしても機能してよいことは了解されよう。さらに、クライアント装置１０４、１１０がサブスクライバーとされるものの、当業者にとって、これらが一つ以上のクラスのメッセージのパブリッシャとしても機能してよいことも了解されよう。
【００２９】
例示的クライアント装置を、無線通信装置２００の模式的部分断面図を示す図２を参照してより詳細に説明する。
【００３０】
クライアント装置２００は、例えばモバイル装置、すなわち、特定の位置に固定されていない装置、あるいは固定装置であってもよい。無線装置は、通信するために人間の相互作用を必要としてもよいし、あるいは、ＭＴＣ装置として、通信するために人間の相互作用を必要としなくてもよい。
【００３１】
クライアント装置２００は、空気を介して、または適切な無線インタフェース２０７により受信装置を介して信号を受信可能かつ、無線信号送信用の適切な装置を介して信号を送信可能である。図２中、送受信機を備えてもよいインタフェースを、模式的にブロック２０６により示している。送受信機は、例えば無線部と対応するアンテナ装置とにより提供されてもよい。このアンテナ装置は、無線装置の内部、または外部に配置可能である。いくつかの実施例において、インタフェースは、金属線または光ファイバを介してデータを送受信可能な有線インタフェースであってもよい。
【００３２】
クライアント装置２００は、通常少なくとも一つのデータ処理手段２０１と、少なくとも一つのメモリ２０２と、その他任意の部品２０３とを備える。その他の部品２０３は、クライアント装置２００のために測定を行う温度センサ、圧力センサ、光強度センサ等のセンサを含んでもよい。その他の部品２０３は、クライアント装置２００が現実世界のタスクを実行するために使用してもよいアクチュエータも含んでよい。データ処理、記憶装置及びその他関連する制御装置は、適切な回路基板及び／又はチップセット上に設けられてもよい。ユーザは、クライアント装置の動作を、キーパッド２０５、音声コマンド、タッチセンサースクリーン又はパッド、これらの組み合わせ等の適切なユーザインタフェースにより制御してもよい。ディスプレイ２０８、及びスピーカが設けられてもよい。さらに、無線通信装置は、他の装置及び／又は、例えばハンズフリー装置等の外部アクセサリへの接続用の適切な（有線または無線の）コネクタを備えてもよい。
【００３３】
クライアント２００は、ＭＱＴＴプロトコルに準拠してメッセージブローカーと通信するよう構成されてもよい。インタフェース２０６は、このプロトコルに準拠して通信するよう構成されてもよい。本例でのクライアント装置は、主に無線通信装置として示されているが、他の例では、クライアント装置は金属線または光ファイバ等の他の手段を用いてメッセージブローカーと通信してもよい。
【００３４】
図１を再び参照すると、クライアント装置１０８等のクライアント装置が、メッセージブローカーと異常切断した場合には問題が生じうる。これを説明すると、正常な切断は、クライアントが切断前にメッセージブローカーに切断メッセージを送信するものである。他方、異常切断は、切断がメッセージブローカーまたはクライアントによって意図的に開始されず、例えば切断メッセージが切断前に送信されない場合に生じる可能性がある。異常切断は、例えばクライアント装置のバッテリーが切れた、あるいは何らかの他の理由によりネットワーク接続が失われた場合にも生じる可能性がある。この場合、メッセージブローカーは、クライアント装置１０８が購読していたクラスのメッセージを受信し続ける可能性がある。メッセージブローカーは、クライアント装置１０８に送信するものと表示されたメッセージをどのように処理するか判断しなくてはならない。メッセージブローカーはこれらのメッセージを、単純に廃棄してもよい。しかし、これは、これらのメッセージがクライアント装置によって処理されないままである点で好ましくないかもしれない。
【００３５】
クライアント装置がメッセージブローカーから切断された場合の案の一つは、クライアント装置に送信されているはずのメッセージをメッセージブローカー内に記憶しておくことである。クライアント装置がメッセージブローカーに再接続した際に、メッセージブローカーは記憶されたメッセージをクライアント装置に送信する。しかし、この場合、記憶されたメッセージは、クライアント装置が再接続するまで未処理のままである。さらに、メッセージブローカー内のメッセージの記憶装置に、追加の記憶装置スペースが必要となる。
【００３６】
別の案は、クライアント固有のクラス／トピックに発行することで、異常切断されたクライアントを他のクライアントに通知することである。これは、予期しないケースについての予防措置である。しかし、この案は、異常切断されたクライアントへ送信される予定のメッセージをどのように処理するかという課題に応答するものではない。クライアントが切断されたことを示すメッセージは、仕様（ｓｐｅｃｉｆｉｃａｔｉｏｎ）メッセージクラス上で宣言可能である。しかし、他のクライアントはこのトピックへのアクセス権限を持たなかったり、これに気付かないかもしれない。
【００３７】
したがって、出版−購読メッセージングシステムのクライアントがメッセージブローカーから切断された場合、特にクライアントがメッセージブローカーから異常切断された場合に問題が生じる。
【００３８】
本明細書に記載される例では、出版−購読メッセージの配信方法であって、第１クライアント装置がメッセージブローカーから切断された場合、メッセージブローカーは第１クライアント装置に送信されるものと表示されたメッセージを、第１クライアント装置の継承者として指定された第２クライアント装置に送信するよう構成される。第１クライアント装置は、特定の（後述される）メッセージをメッセージブローカーに発行することで第２クライアント装置を継承者として指定可能である。この宣言は、一般にＭＱＴＴ接続のいずれのフェーズで行われてもよい。第１クライアント装置の継承者として指定された第２クライアント装置は、メッセージブローカーからこれらのメッセージを受信して処理する。したがって、第１クライアント装置が受信する予定だったメッセージは、第１クライアント装置がメッセージブローカーに再接続する前に、第２クライアント装置によって受信され処理可能とされてもよい。したがって、この例では、このメッセージ継承、すなわち切断されたクライアントのメッセージを別のクライアントに送り、または再割り当てすることを可能とすることから、クライアント装置が再接続するまでメッセージをメッセージブローカーに記憶しておく必要はない。クライアント装置は、異常切断があった場合、装置の間でメッセージフローを自律的に再編成可能である。このように構成された継承又は転送機構は、例えばクライアント装置が切断された場合でもシステムが緊急データパケットを廃棄しないようにするのに役立つ。
【００３９】
第１クライアント装置の継承者を確立するプロセスの例を、図３を参照して以下説明する。図３は、第１クライアント装置３０４がメッセージブローカー３０６から切断された場合に第１クライアント装置３０４に送信される予定のメッセージを第２クライアント装置３０２が受信できるように、第２クライアント装置３０２を第１クライアント装置３０４の継承者として確立するプロセス中に、第１クライアント装置３０４とメッセージブローカー３０６の間、及び第２クライアント装置３０２とメッセージブローカー３０６との間で交換されるメッセージを示す。これらのメッセージの全てが必須ではなく、いくつかの例では、これらのメッセージの一つ以上を省略可能である。この図に示され、本願開示中で述べられるクライアント装置をノードと称する場合がある。このメッセージブローカー３０６は、サーバであってもよい。メッセージブローカー３０６は、複数の装置を含んでもよいし、複数の装置にわたって分散配置されてもよい。例えば、メッセージブローカーの機能は、複数のサーバにわたって分散配置されてもよい。
【００４０】
第２クライアント装置３０２は、他のクライアントに送信されるメッセージを受信するのに第２クライアント装置３０２が利用できることを示すメッセージ３０８をメッセージブローカーに送信するよう構成される。すなわち、メッセージ３０８は、第２クライアント装置３０２が、メッセージブローカー３０６がサービスを提供する他のクライアント装置の継承者候補として利用可能であることを示す。第２クライアント３０２に用いられる「継承者」という用語は、第２クライアント３０２が、メッセージブローカー３０６中で、第１クライアント３０４がメッセージブローカー３０６から切断された場合に、第１クライアント３０４に送信されるものと表示される一つ以上のメッセージを受信するよう割り当てられるものと示されることを意味する。いくつかの例では、メッセージは、第１クライアント３０４が異常切断された場合に、第２クライアント３０２にのみ送られてもよい。第１クライアント装置３０４は、そのメッセージが、切断時にその継承者に送られることから、被相続／継承クライアントと称されてもよい。
【００４１】
メッセージ３０８は、被継承者通知（ｎｏｔｉｆｙＡｎｃｅｓｔｏｒ）メッセージ３０８と呼ぶこともできる。メッセージ３０８は、メッセージブローカー３０６が継承者として利用可能であることが示された第２クライアント装置３０２の身元を判定できるように、第２クライアント装置３０２のＩＤを含んでもよい。メッセージ３０８は、第２クライアント装置３０２のベンダーのＩＤを含んでもよい。メッセージブローカーは、このベンダーＩＤを記憶して、これを、後述するように他のクライアント装置が適切な継承者装置を選択するための補助として用いてもよい。大部分のベンダーがクラウドシステム上で同じＭＱＴＴブローカーを用いる可能性があることから、ベンダーＩＤを読み出すことは、被継承者と継承者とを区別するのに有益であろう。メッセージ３０８の受信後、メッセージブローカー３０６は、第２クライアント装置３０２が継承者として利用可能である旨を記憶してもよい。メッセージブローカー３０６は、メッセージ３０８の受信に対して、第２クライアント装置３０２に受領メッセージ（ＡＣＫ）を送信するよう構成されてもよい。
【００４２】
第１クライアント装置３０４は、メッセージブローカー３０６にポーリングして（ｐｏｌｌｓ）第１クライアント装置３０２の継承者クライアントを取得するメッセージ３１０をメッセージブローカー３０６に送るよう構成される。このポーリングメッセージは、特殊なトピック／クラスに送信されてもよい。このメッセージ３１０は、継承者購読（ｓｕｂｓｃｒｉｂｅＳｕｃｃｅｓｓｏｒｓ）メッセージと呼ぶこともできる。メッセージ３１０は、第１クライアント装置３０４のベンダーのＩＤを含んでもよい。メッセージブローカー３０６は、メッセージ３１０を受信し、第１クライアント装置３０４の一つ以上の継承者候補を決定するよう構成される。第１クライアント３０４の継承者候補は、第１クライアントがメッセージブローカー３０６から異常切断された場合に、第１クライアント３０４に送信される予定の一つ以上のメッセージを受信するのに利用可能なものである。メッセージブローカー３０６は、クライアント装置が継承者として利用可能であることを示している場合にのみ、当該クライアント装置を継承者候補と判断してもよい。この例では、第２クライアント３０２は、自身が継承者として利用可能である旨のメッセージ３０８を送信していることから、この一つ以上の継承者候補に含まれる可能性がある。メッセージブローカー３０６は、メッセージ３１０の受信に対して、第１クライアント装置３０４に受領メッセージ（ＡＣＫ）を送信するよう構成されてもよい。
【００４３】
メッセージブローカー３０６は、第１クライアント装置３０４のベンダーＩＤと、他のクライアントのベンダーＩＤとを照合して合致しているか見ることで第１クライアント装置３０４の適切な継承者を決定してもよい。いくつかの例では、同じベンダーＩＤを持っている場合にのみ、クライアントは別のクライアントの継承者として機能可能である。このようにするのが望ましいのは、継承者の製造業者が第１クライアント装置３０４と異なる事態を確実に避けるためである。というのは、異なる製造業者は、異なるメッセージ処理を実装している可能性があるからである。したがって、メッセージブローカー３０６は、第１クライアント装置３０４のベンダーＩＤと一つ以上の継承者のベンダーＩＤとの間で判明した照合結果に応じて、第１クライアント装置３０４の一つ以上の継承者クライアント候補を特定してもよい。この例では、第１クライアント３０４と第２クライアント３０２とは、同じベンダーＩＤを有してもよく、第２クライアント３０２は、第１クライアント３０４の継承者候補として特定される。
【００４４】
メッセージブローカーが一つ以上の第１クライアントの継承者候補を決定した場合、メッセージブローカーは、この一つ以上の継承者候補の表示を含むメッセージ３１２を第１クライアントに送信するよう構成される。このメッセージ３１２は、継承者データ（ｓｕｃｃｅｓｓｏｒＤａｔａ）メッセージと呼ぶこともできる。このメッセージ３１２は、この一つ以上の継承者候補のそれぞれのＩＤを含んでもよい。この一つ以上の継承者候補のそれぞれのＩＤは、一つ以上の継承者候補のそれぞれのＭＡＣアドレスを含んでもよい。
【００４５】
次に、第１クライアント装置３０４は、メッセージブローカー３０６によって示された一つ以上の継承者候補から継承者を選択してもよい。第１クライアント３０４は、例えば、第２クライアント３０２を継承者として選択してもよい。次に、第１クライアント装置３０４は、第１クライアント装置３０４の継承者とされるべきクライアント装置を示すメッセージ３１４をメッセージブローカー３０６に送ってもよい。このメッセージは、接続フェーズで宣言されてもよい。このメッセージ３１４は、継承者設定（ｓｅｔＳｕｃｃｅｓｓｏｒ）メッセージであってもよい。メッセージ３１４の受信に応じて、メッセージブローカー３０６は、受領メッセージ（ＡＣＫ）を第１クライアント装置３０４に送るよう構成されてもよい。メッセージ３１４は、第２クライアント装置３１４のベンダーのＩＤと第２クライアント装置３１４のＩＤとを含んでもよい。メッセージブローカー３０６はメッセージ３１４を受信し、第２クライアント装置３０２が第１クライアント装置３０４の継承者であるとの表示を記憶する。その後、第１クライアント装置３０４がメッセージブローカー３０６から切断された場合、メッセージブローカー３０６は第１クライアント３０４に送信される予定の一つ以上のメッセージを第２クライアント３０２に送信してもよい。第２クライアント３０２は、これら一つ以上のメッセージを受信し、これらを第１クライアント３０４の代わりに処理する。
【００４６】
ＭＱＴＴプロトコルのブローカーベースのメッセージ配信の性質のため、この継承者設定メッセージを全ての他のクライアントに送る必要はない。例えば、被継承者と継承者との間でのみデータ取得が行われる場合もある。受信した継承者設定メッセージを他の全てのノードにブロードキャストする代わりに、メッセージブローカーは被継承者と継承者とのデータベースを備え、入ってくるメッセージを被継承者クライアント（すなわち、本例での第１クライアント）に送るか、継承者クライアント（すなわち、本例での第２クライアント）に送るかを判断する。
【００４７】
メッセージブローカー３０６に記憶可能なデータ４００の例を示す図４を参照して説明する。第１データ構造４０２は、第１クライアント３０４に関する情報を含む一つ以上のフィールドを備える。第２データ構造４０４は、第１クライアント３０４の継承者として選択されている第２クライアント３０２についての情報を含む一つ以上のフィールドを備える。第１データ構造４０２は、メッセージブローカーが通信するクライアント装置から一義的に識別可能とする第１クライアント３０４のＩＤ（図中、ノードＩＤとして示す）を含む。このＩＤは、第１クライアント装置３０４のＭＡＣアドレスであってもよい。第１データ構造４０２はベンダーＩＤ（図中、ベンダーＩＤとして示す）を含んでもよい。これにより、第１クライアント３０４の製造業者が識別される。第１データ構造４０２は、第１クライアント３０４がメッセージブローカー３０６に接続されているかメッセージブローカー３０６から切断されているかの表示（図中ＩｓＡｌｉｖｅとして示す）を含んでもよい。メッセージブローカー３０６は、この表示を用いて、第１クライアント３０４に送信される予定だったメッセージを第１クライアント３０４に送るのか（表示が第１クライアントがメッセージブローカーに接続されていることを示す場合）、継承者、すなわち第２クライアント３０２に送るのか（表示が第２クライアントがメッセージブローカーから切断されていることを示す場合）を判定してもよい。第１クライアント装置３０４がメッセージブローカーから異常切断されている場合、メッセージブローカー３０６は、第１クライアント装置３０４が異常切断されていることを検出するのに応じて、例えばＩｓＡｌｉｖｅフィールドをｆａｌｓｅにセットすることで、このフィールドを、第１クライアント３０４が異常切断されていることを示すよう設定するよう構成される。
【００４８】
第１データ構造４０２は、第２データ構造４０４と関連付けられてもよい。これら二つのデータ構造は「外部キー」によって関連付けられてもよい。第２データ構造４０４は、第１クライアント３０４のＩＤ（図中、ｎｏｄｅＩＤとして示す）を含んでもよい。このｎｏｄｅＩＤ属性は、外部キーによって第１データ構造４０２と関連付けられ、二つのデータ構造の間で所定のｎｏｄｅＩＤを容易に問い合わせできるようにされてもよい。第２データ構造４０４は、第２クライアントのＩＤ（図中、ｓｕｃｃｅｓｓｏｒＩＤとして示す）を含んでもよい。このＩＤにより第２クライアント３０４が一義的に識別される。
【００４９】
メッセージブローカーによって実行される方法の例を示す図５を参照して説明する。この方法中の工程の全てが必須ではなく、いくつかの例では、これらの工程の一つ以上を省略可能であることが当業者に理解されよう。
【００５０】
Ｓ５０２において、メッセージブローカー３０６は、第２クライアント３０２が他のクライアントに送信されることになっているメッセージを受信するのに利用可能であることを示すメッセージを第２クライアント３０２から受信する。
【００５１】
Ｓ５０４において、メッセージブローカーは、第１クライアント３０４から、第１クライアント３０４に送信されることになっている一つ以上のメッセージを受信する一つ以上のクライアントが利用できる旨を第１クライアント３０４に受信する。
【００５２】
Ｓ５０６において、メッセージブローカー３０６は、第１クライアント３０４から第１クライアント３０４に送信されることになっている一つ以上のメッセージを受信する第２クライアント３０２が利用できるかを示すことを求めるメッセージを送信する。
【００５３】
Ｓ５０８において、メッセージブローカー３０６は、第１クライアント３０４から第２クライアント３０２を第１クライアント３０４の継承者として指定する旨を受信する。このメッセージに対し、メッセージブローカー３０６は第２クライアント装置３０２が第１クライアント装置３０４の継承者である旨を記憶する。
【００５４】
Ｓ５１０において、メッセージブローカーは、パブリッシャとして機能する第３クライアント装置から一つ以上のメッセージを受信する。これらのメッセージは、第１クライアント３０４に送信されるものと示される。これらのメッセージは、特定のクラスに属するものであってよく、これらのメッセージが第１クライアント３０４に送信されるものである旨の表示は、これらのメッセージが第１クライアント３０４が購読するクラスによって購読される旨の表示を含んでもよい。メッセージブローカー３０６は、第１クライアント３０４が一つ以上のメッセージが属するクラスを購読していることを判定することにより、これら一つ以上のメッセージが第１クライアント３０４に送信されるべきものであると判定してもよい。
【００５５】
Ｓ５１２において、メッセージブローカー３０６は、第１クライアント３０４がメッセージブローカー３０６から切断されているかを判定する。これは、第１クライアント３０４がメッセージブローカー３０６から異常切断されているかの判定を含んでもよい。メッセージブローカー３０６は、接続の問題または正常でない切断を検出するのに応じて、第１クライアント３０４がメッセージブローカー３０６から異常切断されていることを判定してもよい。
【００５６】
Ｓ５１４において、メッセージブローカー３０６は、第１クライアント３０４がメッセージブローカー３０６から切断されていると判定された場合、一つ以上のメッセージを第２クライアント３０２に送信してもよい。
【００５７】
Ｓ５１６において、メッセージブローカー３０６は、第１クライアント３０４がメッセージブローカー３０６に接続されていると判定された場合、一つ以上のメッセージを第１クライアント３０４に送信する。
【００５８】
第１クライアント３０４によって実行される方法６００の例を示す図６を参照して説明する。この方法中の工程の全てが必須ではなく、いくつかの例では、これらの工程の一つ以上を省略可能であることが当業者に理解されよう。
【００５９】
Ｓ６０２において、第１クライアント３０４は、メッセージブローカー３０６に、第１クライアント３０４に送信されることになっている一つ以上のメッセージを受信する一つ以上のクライアントが利用できるかを示すことを求めるメッセージを送信する。
【００６０】
Ｓ６０４において、第１クライアント３０４は、メッセージブローカー３０６から、第１クライアント３０４に送信されることになっている一つ以上のメッセージを受信する一つ以上のクライアントが利用できることを示すメッセージを受信する。この一つ以上のクライアントは、本例においては、第２クライアント３０２を含む。
【００６１】
Ｓ６０６において、第１クライアント３０４は、メッセージブローカー３０６に、第２クライアント３０２を第１クライアント３０４の継承者として指定するメッセージを送信する。第１クライアント３０４は、このメッセージの送信前に、一つ以上の利用可能なクライアントから第２クライアント３０２を継承者として選択する。このメッセージは、第１クライアント３０４がメッセージブローカー３０６から切断される場合に、ｒｏｕｔｅ第１クライアント３０４に送られることになっている一つ以上のメッセージを第２クライアント３０２に送るようメッセージブローカー３０６に指示するものであってもよい。
【００６２】
Ｓ６０８において、第１クライアント３０４はメッセージブローカー３０６から切断される。この切断は、異常切断であってもよい。
【００６３】
継承者クライアント、本例では第２クライアント３０２で実行可能な方法を示す図７を参照して説明する。この方法中の工程の全てが必須ではなく、いくつかの例では、これらの工程の一つ以上を省略可能であることが当業者に理解されよう。
【００６４】
Ｓ７０２において、第２クライアント３０２は、メッセージブローカー３０６に、他のクライアントに送信されることになっているメッセージを第２クライアント３０２によって受信可能であることを示すメッセージを送信するよう構成される。
【００６５】
Ｓ７０４において、第２クライアント３０２は、メッセージブローカー３０６から、第１クライアント３０４に送信されることになっていた一つ以上のメッセージを受信するよう構成される。第２クライアント３０２は、第１クライアント３０４の代わりにこれらのメッセージを処理してもよい。
【００６６】
出版−購読通信システムを模式的に示す図８を参照して説明する。この図は、メッセージを他のクライアントに送信するパブリッシャとして機能するよう構成される第３クライアント８０４も示す。第１クライアント８０６は、図３を参照して上述された第１クライアント３０４と同じであり同じ機能を果たしてもよい。第２クライアント８０８は、図３を参照して上述された第２クライアント３０２と同じであり同じ機能を果たしてもよい。メッセージブローカー８０２は、図３を参照して上述されたメッセージブローカー３０６と同じであり同じ機能を果たしてもよい。この例では、第１クライアント８０６は、第３クライアント８０４によって送信されたクラスのメッセージを購読している。
【００６７】
図中に示される数（１）によって表されるメッセージは、第２クライアント８０８を第１クライアント８０６の継承者として確立するために第１クライアント８０６から送信される通知／購読メッセージ（例えば、被継承者通知、継承者購読、継承者データ、継承者設定）を表す。第１クライアント８０６がメッセージブローカー８０２に接続している場合、第３クライアント８０４は、ブローカー８０２を介して第１クライアント８０６に一つ以上のメッセージ（図中、メッセージ（２）によって表される）を送信する。しかし、第１クライアント８０６がメッセージブローカー８０２との接続を失った場合、（その示されたクラス／トピックにより）第１クライアント８０６に送信されることになっている次の一つ以上のメッセージ（図中メッセージ（３）としてあらわされる）は、継承者宣言に応じてブローカー８０２によって第２クライアント８０８に転送／送信される。この使用シナリオにより、第３クライアント８０４のメッセージが、第２クライアントに関連するクライアントに何らかの形で配信されて処理可能となるか、他のノードに報知されることで当該メッセージが無駄にならないようになる。
【００６８】
プロセッサ、プロセシングシステムまたは回路と本明細書に記載されるものは、実務上、単一のチップまたは集積回路により実装されても、複数のチップまたは集積回路により実装されてもよく、あるいはチップセット、特定用途向け集積回路（ＡＳＩＣ）、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、デジタル・シグナル・プロセッサ（ＤＳＰ）、グラフィクス・プロセッシング・ユニット（ＧＰＵｓ）等によって実装されてもよい。このチップまたは複数のチップは、実施例にしたがって動作するよう構成可能なデータプロセッサおよびデジタル・シグナル・プロセッサの少なくとも一方を実装するための回路（ならびに場合によってファームウェア）を備えてもよい。この点に関し、例示的実施例は、少なくとも部分的に（不揮発性）メモリーに記憶されプロセッサにより実行可能なコンピュータソフトウェア、ハードウェア、または実体的に記憶されたソフトウェアとハードウェア（および実体的に記憶されたファームウェア）との組み合わせにより実装されてもよい。
【００６９】
データ記憶用のデータ記憶装置について本明細書に記載する。これは、単一の装置または複数の装置により実装されてもよい。適切な装置としては、例えばハードディスクおよび不揮発性半導体メモリーが挙げられる。
【００７０】
明細書中ではＭＱＴＴ（Ｍｅｓｓａｇｅ  Ｑｕｅｕｅ  Ｔｅｌｅｍｅｔｒｙ  Ｔｒａｎｓｐｏｒｔ）プロトコルが言及されているものの、これは単なる例であり、本願開示のいくつかの例では、他のプロトコルのユーザを含んでもよいことが当業者には理解されるであろう。
【００７１】
本明細書に記載される例は、本発明の実施形態を説明するための例として理解されるべきである。別の実施形態および例が想定される。一つの例または実施形態に関して記載される任意の特徴は、単独で、またはほかの特徴と組み合わせて使用可能である。加えて、一つの例または実施形態に関連して記載された任意の特徴は、他の例または実施形態、または他の例または実施形態の任意の組み合わせのいずれかの特徴と組み合わせても使用可能である。さらに、本明細書に記載されない均等物および変形例も、請求項に定義される本発明の範囲内で利用可能である。
【図１】
2020524966.tif 000003
【図２】
2020524966.tif 000004
【図３】
2020524966.tif 000005
【図４】
2020524966.tif 000006
【図５】
2020524966.tif 000007
【図６】
2020524966.tif 000008
【図７】
2020524966.tif 000009
【図８】
2020524966.tif 000010
【国際調査報告】
2020524966.tif 000011
2020524966.tif 000012