(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-11-22
(45)【発行日】2022-12-01
(54)【発明の名称】出版-購読メッセージの配信方法及び装置
(51)【国際特許分類】
H04M 11/00 20060101AFI20221124BHJP
【FI】
H04M11/00 302
(21)【出願番号】P 2019571357
(86)(22)【出願日】2017-10-06
(86)【国際出願番号】 EP2017075483
(87)【国際公開番号】W WO2018233855
(87)【国際公開日】2018-12-27
【審査請求日】2020-09-29
(32)【優先日】2017-06-23
(33)【優先権主張国・地域又は機関】EP
【前置審査】
(73)【特許権者】
【識別番号】513121384
【氏名又は名称】ベステル エレクトロニク サナイー ベ ティカレト エー.エス.
(74)【代理人】
【識別番号】110000637
【氏名又は名称】特許業務法人樹之下知的財産事務所
(72)【発明者】
【氏名】ドネル チャーダシュ
【審査官】大橋 達也
(56)【参考文献】
【文献】特開2012-003437(JP,A)
【文献】特開2002-268986(JP,A)
【文献】特表2009-519509(JP,A)
【文献】特開2007-174127(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04M 1/00-11/00
G06F 13/00
H04L 67/00
(57)【特許請求の範囲】
【請求項1】
出版-購読メッセージをネットワーク上でメッセージブローカーによりクライアントに配信する方法であって、
前記メッセージブローカーにより、第1クライアントから、第2クライアントを前記第1クライアントの継承者として特定するメッセージを受信し、
前記第1クライアントが前記メッセージブローカーから切断されていることを判定し、
前記第1クライアントが前記メッセージブローカーから切断されているとの判定に応じ、前記メッセージブローカーにより、前記第1クライアントに送信されるものとされる一つ以上のメッセージを前記第2クライアントに送
り、
前記第1クライアントから前記メッセージを受信する前に、前記第2クライアントを特定し、
前記第2クライアントから、前記第2クライアントが他のクライアントに送信されることになっているメッセージを受信するのに利用可能であることを示すメッセージを受信し、
前記第1クライアントに、前記第1クライアントに送信されることになっている前記一つ以上のメッセージを受信するのに前記第2クライアントが利用可能である旨を送信することを特徴とする方法。
【請求項2】
請求項1に記載の方法であって、前記第1クライアントが前記メッセージブローカーから切断されることの判定工程は、前記第1クライアントが前記メッセージブローカーから異常切断されていることの判定工程を含むことを特徴とする方法。
【請求項3】
請求項1又は2に記載の方法であって、前記一つ以上のメッセージは、MQTT(Message Queue Telemetry Transport)メッセージであることを特徴とする方法。
【請求項4】
請求項1から請求項
3のいずれか一項に記載の方法であって、前記第2クライアントからの前記メッセージは前記第2クライアントのベンダーIDを含み、前記第1クライアントに前記第2クライアントが利用可能である旨を送信する工程は、前記第2クライアントのベンダーIDが前記第1クライアントのベンダーIDと一致するとの判定に応じて実行されることを特徴とする方法。
【請求項5】
請求項
4に記載の方法であって、
一つ以上のクライアントに問い合わせて、前記第1クライアントに送信されることになっている前記一つ以上のメッセージを受信するのに利用可能であることを判定する前記第1クライアントからのポーリングメッセージの受信に応じて、前記第1クライアントに前記第2クライアントが利用可能である旨を送信することを特徴とする方法。
【請求項6】
請求項1から請求項
5のいずれか一項に記載の方法であって、前記一つ以上のメッセージは、前記第1クライアントによる前記一つ以上のメッセージのクラスの購読の表示によって前記第1クライアントに送られるものとされ、前記表示は、前記メッセージブローカーによって記憶されることを特徴とする方法。
【請求項7】
請求項1から請求項
6のいずれか一項に記載の方法であって、
前記第1クライアントからの
前記第2クライアントを特定する前記メッセージは、前記第2クライアントのMAC(media access control)アドレスを含むことを特徴とする方法。
【請求項8】
クライアントへの出版-購読メッセージの配信を制御する方法であって、
第1クライアントにより、第2クライアントを第1クライアントの継承者として特定するメッセージブローカーに、前記メッセージブローカーが、前記第1クライアントは前記メッセージブローカーから切断されたことを判定するのに応じて、前記第1クライアントに送信されるものとされる一つ以上のメッセージを前記第2クライアントへ送らせる指示を含むメッセージを送信
し、
前記第1クライアントが前記第2クライアントを前記第1クライアントの継承者として特定するメッセージを送信する前に、
前記第1クライアントは、前記第2クライアントから、前記第2クライアントが他のクライアントに送信されることになっているメッセージを受信するのに利用可能であることを示すメッセージを受信し、前記第2クライアントが前記第1クライアントへの送信を目的とした1つ以上のメッセージを受信するのに利用可能であることを示すメッセージを前記メッセージブローカーから受信することを特徴とする方法。
【請求項9】
コンピュータによって実行された際、前記コンピュータが請求項1から
8のいずれか一項に記載の方法を実行するよう構成される指示を含むコンピュータプログラム。
【請求項10】
クライアントに出版-購読メッセージを配信するよう構成されるメッセージブローカーであって、少なくとも一つのプロセッサとコンピュータプログラムコードを含む少なくとも一つのメモリとを備え、前記少なくとも一つのメモリと前記コンピュータプログラムコードは、前記少なくとも一つのプロセッサとともに、前記メッセージブローカーに少なくとも、
前記メッセージブローカーの第1クライアントが前記メッセージブローカーから切断されていることを判定させ、
前記第1クライアントが前記メッセージブローカーから切断されているとの判定に応じて、前記第1クライアントに送信されるものとされる一つ以上のメッセージを、前記第1クライアントからのメッセージ中で前記第1クライアントの継承者として特定された第2クライアントに送らせ
、
前記第2クライアントから、前記第2クライアントが他のクライアントに送信されることになっているメッセージを受信するのに利用可能であることを示すメッセージを受信可能に構成され、
前記第1クライアントに、前記第1クライアントに送信されることになっている前記一つ以上のメッセージを受信するのに前記第2クライアントが利用可能である旨を送信することを特徴とするメッセージブローカー。
【請求項11】
クライアントへの出版-購読メッセージの配信を制御するよう構成される第1クライアント装置であって、少なくとも一つのプロセッサとコンピュータプログラムコードを含む少なくとも一つのメモリとを備え、前記少なくとも一つのメモリと前記コンピュータプログラムコードは、前記少なくとも一つのプロセッサとともに、前記第1クライアント装置に少なくとも、
第2クライアントを第1クライアントの継承者として特定するメッセージブローカーに、前記メッセージブローカーが、前記第1クライアントは前記メッセージブローカーから切断されたことを判定するのに応じて、前記第1クライアントに送信されるものとされる一つ以上のメッセージを前記第2クライアントへ送らせる指示を含むメッセージを送るようにさせ
、
前記第1クライアントが前記第2クライアントを特定する前記メッセージを送信する前に、
前記第2クライアントから、前記第2クライアントが他のクライアントに送信されることになっているメッセージを受信するのに利用可能であることを示すメッセージを受信し、前記第2クライアントが前記第1クライアントへの送信を目的とした1つ以上のメッセージを受信するのに利用可能であることを示すメッセージを前記メッセージブローカーから受信することを特徴とする第1クライアント装置。
【発明の詳細な説明】
【技術分野】
【0001】
本願開示は、メッセージブローカーを用いてネットワーク上でクライアントに出版-購読(publish-subscribe)メッセージを配信する方法及び装置に関する。
【背景技術】
【0002】
通信システムは、ユーザ装置、マシン型端末(machine-like terminals)、サーバ、その他のノード等の二つ以上の装置間で情報を伝達する通信経路を提供することで、これら二つ以上の装置間の通信を可能とする設備であるとみなすことができる。通信システムは、例えば、通信ネットワークと一つ以上の互換性のある通信装置とにより提供することができる。この通信は、例えば音声データを伝えるデータ通信、電子メール(eメール)、テキストメッセージ、マルチメディア及び/又はコンテンツデータ通信等を含んでよい。
【0003】
装置間でメッセージを交換するのに実行可能な具体的モデルの一つが、出版-購読モデル(publish-subscribe pattern)である。
【発明の概要】
【0004】
第1の側面によれば、出版-購読メッセージをネットワーク上でメッセージブローカーによりクライアントに配信する方法であって、前記メッセージブローカーにより、第1クライアントから、第2クライアントを前記第1クライアントの継承者として特定するメッセージを受信し、前記第1クライアントが前記メッセージブローカーから切断されていることを判定し、前記第1クライアントが前記メッセージブローカーから切断されているとの判定に応じ、前記メッセージブローカーにより、前記第1クライアントに送信されるものとされる一つ以上のメッセージを前記第2クライアントに送る方法が提供される。
【0005】
いくつかの例において、前記第1クライアントが前記メッセージブローカーから切断されることの判定工程は、前記第1クライアントが前記メッセージブローカーから異常切断されていることの判定工程を含む。
【0006】
いくつかの例において、前記一つ以上のメッセージは、MQTT(Message Queue Telemetry Transport)メッセージである。
【0007】
いくつかの例において、前記方法では、前記第1クライアントから前記メッセージを受信する前に前記第2クライアントを特定し、前記第2クライアントから、前記第2クライアントが他のクライアントに送信されることになっているメッセージを受信するのに利用可能であることを示すメッセージを受信し、前記第1クライアントに、前記第1クライアントに送信されることになっている前記一つ以上のメッセージを受信するのに前記第2クライアントが利用可能である旨を送信する。
【0008】
いくつかの例において、前記第2クライアントからの前記メッセージは前記第2クライアントのベンダーIDを含み、前記第1クライアントに前記第2クライアントが利用可能である旨を送信する工程は、前記第2クライアントのベンダーIDが前記第1クライアントのベンダーIDと一致するとの判定に応じて実行される。
【0009】
いくつかの例において、前記方法では、一つ以上のクライアントに問い合わせて、前記第1クライアントに送信されることになっている前記一つ以上のメッセージを受信するのに利用可能であることを判定する前記第1クライアントからのポーリングメッセージの受信に応じて、前記第1クライアントに前記第2クライアントが利用可能である旨を送信する。
【0010】
いくつかの例において、前記一つ以上のメッセージは、前記第1クライアントによる前記一つ以上のメッセージのクラスの購読の表示によって前記第1クライアントに送られるものとされ、前記表示は、前記メッセージブローカーによって記憶される。
【0011】
いくつかの例において、第1クライアントからの第2クライアントを特定する前記メッセージは、前記第2クライアントのMAC(media access control)アドレスを含む。
【0012】
第2の側面によれば、クライアントへの出版-購読メッセージの配信を制御する方法であって、第1クライアントにより、第2クライアントを第1クライアントの継承者として特定するメッセージブローカーに、前記メッセージブローカーが、前記第1クライアントは前記メッセージブローカーから切断されたことを判定するのに応じて、前記第1クライアントに送信されるものとされる一つ以上のメッセージを前記第2クライアントへ送らせる指示を含むメッセージを送信する方法が提供される。
【0013】
第3の側面によれば、コンピュータによって実行された際、前記コンピュータが第1または第2の側面の工程を実行するよう構成される指示を含むコンピュータプログラムが提供される。
【0014】
第4の側面によれば、クライアントに出版-購読メッセージを配信するよう構成されるメッセージブローカーであって、少なくとも一つのプロセッサとコンピュータプログラムコードを含む少なくとも一つのメモリとを備え、前記少なくとも一つのメモリと前記コンピュータプログラムコードは、前記少なくとも一つのプロセッサとともに、前記メッセージブローカーに少なくとも、前記メッセージブローカーの第1クライアントが前記メッセージブローカーから切断されていることを判定させ、前記第1クライアントが前記メッセージブローカーから切断されているとの判定に応じて、前記第1クライアントに送信されるものとされる一つ以上のメッセージを、前記第1クライアントからのメッセージ中で前記第1クライアントの継承者として特定された第2クライアントに送らせるメッセージブローカーが提供される。
【0015】
第5の側面によれば、クライアントへの出版-購読メッセージの配信を制御するよう構成される第1クライアント装置であって、少なくとも一つのプロセッサとコンピュータプログラムコードを含む少なくとも一つのメモリとを備え、前記少なくとも一つのメモリと前記コンピュータプログラムコードは、前記少なくとも一つのプロセッサとともに、前記第1クライアント装置に少なくとも、第2クライアントを第1クライアントの継承者として特定するメッセージブローカーに、前記メッセージブローカーが、前記第1クライアントは前記メッセージブローカーから切断されたことを判定するのに応じて、前記第1クライアントに送信されるものとされる一つ以上のメッセージを前記第2クライアントへ送るようにさせる指示を含むメッセージを送る第1クライアント装置が提供される。
【図面の簡単な説明】
【0016】
本願開示の理解を促進し、どのように実施例が効果を奏するのかを示すため、例示として添付の図面が参照される。
【0017】
【
図1】出版-購読通信システムの例を模式的に示す図である。
【
図3】出版-購読通信システムの例を模式的に示す図である。
【
図4】メッセージブローカーに記憶されるクライアント関連データの例を示す図である。
【
図5】本願開示の例におけるメッセージブローカーで行われる例示的方法を示す図である。
【
図6】本願開示の例における第1クライアントで行われる例示的方法を示す図である。
【
図7】本願開示の例における第2クライアントで行われる例示的方法を示す図である。
【
図8】出版-購読通信システムの例を模式的に示す図である。
【発明を実施するための形態】
【0018】
本願明細書において、便宜上かつ慣習上、「クライアント」、「パブリッシャ」、「サブスクライバー」、「メッセージブローカー」等と記載されるものは、文脈上他の意味で解釈される場合を除き、「クライアント装置」、「パブリッシャ装置」、「サブスクライバー装置」、「メッセージブローカー装置」、等を意味するものと解釈されるべきである。
【0019】
上述のように、装置間でメッセージを交換するのに実行可能な具体的モデルの一つが、いわゆる出版-購読モデルである。この中では、メッセージを送信しているクライアントは、多くの通信システムで一般に行われているのとは異なり、当該メッセージを特定の受信装置に直接送信するようにプログラムすることによってメッセージを送信するわけではない。代わりに、パブリッシャとして知られるクライアントがメッセージを送信する際、このクライアントは、メッセージが属する特定の「クラス」(又は「トピック」)の表示(indication)とともに当該メッセージが送信されるようにプログラムする。このメッセージは、パブリッシャにより、サブスクライバーとして知られる当該パブリッシャによって送信される特定のクラスのメッセージの購読を登録した全クライアントのリストを有するメッセージブローカーに送信される。その後、メッセージブローカーは当該メッセージを、クラスによって示されたサブスクライバーに送信する。特定のクラスのメッセージの購読を登録するため、クライアントはメッセージブローカーに購読メッセージを送信してもよく、メッセージブローカーは当該クライアントが当該クラスのメッセージの受信を購読した旨の表示を記憶し、パブリッシャから受信する将来のメッセージをすべてクライアントに向けて転送することとなる。
【0020】
出版-購読ベースのメッセージングでしばしば用いられるプロトコルの一つが、TCP/IPプロトコル上で用いられる軽量なメッセージングプロトコルであるMQTT(Message Queuing Telemetry Transport)プロトコルである。MQTTは、特に性能の限られた装置及び低帯域幅、高遅延又は信頼性の低いネットワークのために特に設計される。設計原則は、信頼性及びある程度確実な配信を確保しつつ、ネットワーク帯域及び装置リソース要件を最小化することである。これらの原則により、このプロトコルは、近年普及している「M2M(machine-to-machine)」または「モノのインターネット」の世界で接続された装置、及び帯域及びバッテリーパワーが貴重であるモバイル装置での用途に理想的である。
【0021】
一般に、本明細書中で、IoT装置とは、アドレス可能なインタフェース(例:インターネットプロトコル(IP)アドレス、Bluetooth(登録商標)識別子(ID)、近距離無線通信(NFC)ID等)を有し、有線または無線接続を介して一つ以上の他の装置に情報を伝達可能な装置である。IoT装置は、一般に例えば、冷蔵庫、オーブン、電子レンジ、冷凍庫、食器洗浄機、洗濯機、衣類乾燥機、炉(furnaces)、エアコン、温度自動調節器、テレビ等の家電製品、照明機器、真空掃除機、スプリンクラー、電気メータ、ガスメータ、等を含み、またはこれらに内蔵される。IoT装置は、例えば、IoT装置が温度、湿度、圧力、光量、汚染度等のセンサである場合など、主電源がない場所/状況、またはIoT装置が主電源に適合しない場所/状況に配置される可能性がある。
【0022】
出版-購読システムにおいて、クライアントは、メッセージブローカーと異常切断される(ungracefully disconnected)場合がある。しかし、メッセージブローカーは、この異常切断されたクライアントが購読しているクラスのメッセージをさらに受信する可能性がある。メッセージブローカーはこれらのクライアント宛てのメッセージを、単に廃棄可能してもよい。しかし、この場合には、これらのメッセージは処理されないままである。
【0023】
実施例を詳細に説明する前に、記載される実施例に内在する技術の理解を促進するために、出版-購読通信システムの一般原理と適切な通信装置とを、
図1及び2を参照して簡単に説明する。
【0024】
図1は、出版-購読通信システムの例を示す。メッセージブローカー102は、複数のクライアント装置104、106、108、110と通信するのに用いられるインタフェース112を備える。このメッセージブローカー102は、例えばサーバであってもよい。インタフェース112は、有線及び/又は無線インタフェースを介してクライアント装置から信号を受信し、有線及び/又は無線インタフェースを介してクライアント装置に信号を送信する送受信機を備えてもよい。無線接続のため、送受信機は、例えば無線部と対応するアンテナ装置とを備えてもよい。このアンテナ装置は、メッセージブローカーの内部、または外部に配置可能である。
【0025】
インタフェース112は、例えばメッセージがクライアント装置によりメッセージブローカーに送信される際に当該メッセージを入力する入力待ちまたは同時入力ノードであってもよい入力機構を備えてもよい。発行された(published)メッセージは、コントローラ114によって入力機構から取得され、特にメッセージの送信先となるクライアント装置を判定するために処理される。メッセージブローカー102からメッセージが送受信される複数のインタフェースがあってもよい。
【0026】
受信したメッセージが示すクラスにより、パブリッシャとサブスクライバーとの間のメッセージ(発行物)の配信に対するキーが与えられる。ブローカーは、発行されたメッセージ上のクラス文字列と、当該クラス文字列を含むメッセージの受信を購読しているクライアントのリストとを照合するよう構成される。各メッセージクラスについてのクライアントのリストは、記憶装置116中に保持されてもよい。クラス文字列とクライアントとを照合するため、照合エンジン118をメッセージブローカーに設けてもよい。クライアント装置をサブスクライバーとして登録する際、(入力待ちまたはその他の入力機構であってもよい)メッセージの受信手段及び受信を希望するメッセージのクラスの表示が特定されてもよい。
【0027】
一例では、クライアント装置は「温度」、「圧力」、「湿度」、「光強度」、等のクラス文字列を含むメッセージを受信することを希望する旨の購読請求メッセージを送信してもよい。メッセージブローカーは、インタフェースでこのようなメッセージを受信し、コントローラで処理して、クラス文字列「温度」を登録していたクライアント装置を記憶装置116内で更新すべきことを判定する。コントローラは、当該クラス文字列を登録したクライアント装置のリストを記憶装置116に書き込んで更新するよう構成される。
【0028】
その後、クライアント104、110がクラス「温度」のメッセージ受信を購読した場合、クライアント106(すなわち、この場合のパブリッシャ)がクラス「温度」のメッセージをメッセージブローカーに送信し、このメッセージはインタフェースで受信されることを想定する。照合エンジン118は、クラス「温度」を、このクラスのサブスクライバーとして登録したクライアントのリストと照合し、これにより、クライアント装置104、110がサブスクライバーとして登録されていることを判定する。コントローラは、このメッセージを処理して、例えば適切なヘッダを挿入するなどしてクライアント装置104、110に送信されるようプログラムする。インタフェースは、その後メッセージのコピーをクライアント装置104、110に送信する。クライアント装置106がパブリッシャとされるものの、当業者にとって、クライアント装置106が一つ以上のクラスのメッセージのサブスクライバーとしても機能してよいことは了解されよう。さらに、クライアント装置104、110がサブスクライバーとされるものの、当業者にとって、これらが一つ以上のクラスのメッセージのパブリッシャとしても機能してよいことも了解されよう。
【0029】
例示的クライアント装置を、無線通信装置200の模式的部分断面図を示す
図2を参照してより詳細に説明する。
【0030】
クライアント装置200は、例えばモバイル装置、すなわち、特定の位置に固定されていない装置、あるいは固定装置であってもよい。無線装置は、通信するために人間の相互作用を必要としてもよいし、あるいは、MTC装置として、通信するために人間の相互作用を必要としなくてもよい。
【0031】
クライアント装置200は、空気を介して、または適切な無線インタフェース207により受信装置を介して信号を受信可能かつ、無線信号送信用の適切な装置を介して信号を送信可能である。
図2中、送受信機を備えてもよいインタフェースを、模式的にブロック206により示している。送受信機は、例えば無線部と対応するアンテナ装置とにより提供されてもよい。このアンテナ装置は、無線装置の内部、または外部に配置可能である。いくつかの実施例において、インタフェースは、金属線または光ファイバを介してデータを送受信可能な有線インタフェースであってもよい。
【0032】
クライアント装置200は、通常少なくとも一つのデータ処理手段201と、少なくとも一つのメモリ202と、その他任意の部品203とを備える。その他の部品203は、クライアント装置200のために測定を行う温度センサ、圧力センサ、光強度センサ等のセンサを含んでもよい。その他の部品203は、クライアント装置200が現実世界のタスクを実行するために使用してもよいアクチュエータも含んでよい。データ処理、記憶装置及びその他関連する制御装置は、適切な回路基板及び/又はチップセット上に設けられてもよい。ユーザは、クライアント装置の動作を、キーパッド205、音声コマンド、タッチセンサースクリーン又はパッド、これらの組み合わせ等の適切なユーザインタフェースにより制御してもよい。ディスプレイ208、及びスピーカが設けられてもよい。さらに、無線通信装置は、他の装置及び/又は、例えばハンズフリー装置等の外部アクセサリへの接続用の適切な(有線または無線の)コネクタを備えてもよい。
【0033】
クライアント200は、MQTTプロトコルに準拠してメッセージブローカーと通信するよう構成されてもよい。インタフェース206は、このプロトコルに準拠して通信するよう構成されてもよい。本例でのクライアント装置は、主に無線通信装置として示されているが、他の例では、クライアント装置は金属線または光ファイバ等の他の手段を用いてメッセージブローカーと通信してもよい。
【0034】
図1を再び参照すると、クライアント装置108等のクライアント装置が、メッセージブローカーと異常切断した場合には問題が生じうる。これを説明すると、正常な切断は、クライアントが切断前にメッセージブローカーに切断メッセージを送信するものである。他方、異常切断は、切断がメッセージブローカーまたはクライアントによって意図的に開始されず、例えば切断メッセージが切断前に送信されない場合に生じる可能性がある。異常切断は、例えばクライアント装置のバッテリーが切れた、あるいは何らかの他の理由によりネットワーク接続が失われた場合にも生じる可能性がある。この場合、メッセージブローカーは、クライアント装置108が購読していたクラスのメッセージを受信し続ける可能性がある。メッセージブローカーは、クライアント装置108に送信するものと表示されたメッセージをどのように処理するか判断しなくてはならない。メッセージブローカーはこれらのメッセージを、単純に廃棄してもよい。しかし、これは、これらのメッセージがクライアント装置によって処理されないままである点で好ましくないかもしれない。
【0035】
クライアント装置がメッセージブローカーから切断された場合の案の一つは、クライアント装置に送信されているはずのメッセージをメッセージブローカー内に記憶しておくことである。クライアント装置がメッセージブローカーに再接続した際に、メッセージブローカーは記憶されたメッセージをクライアント装置に送信する。しかし、この場合、記憶されたメッセージは、クライアント装置が再接続するまで未処理のままである。さらに、メッセージブローカー内のメッセージの記憶装置に、追加の記憶装置スペースが必要となる。
【0036】
別の案は、クライアント固有のクラス/トピックに発行することで、異常切断されたクライアントを他のクライアントに通知することである。これは、予期しないケースについての予防措置である。しかし、この案は、異常切断されたクライアントへ送信される予定のメッセージをどのように処理するかという課題に応答するものではない。クライアントが切断されたことを示すメッセージは、仕様(specification)メッセージクラス上で宣言可能である。しかし、他のクライアントはこのトピックへのアクセス権限を持たなかったり、これに気付かないかもしれない。
【0037】
したがって、出版-購読メッセージングシステムのクライアントがメッセージブローカーから切断された場合、特にクライアントがメッセージブローカーから異常切断された場合に問題が生じる。
【0038】
本明細書に記載される例では、出版-購読メッセージの配信方法であって、第1クライアント装置がメッセージブローカーから切断された場合、メッセージブローカーは第1クライアント装置に送信されるものと表示されたメッセージを、第1クライアント装置の継承者として指定された第2クライアント装置に送信するよう構成される。第1クライアント装置は、特定の(後述される)メッセージをメッセージブローカーに発行することで第2クライアント装置を継承者として指定可能である。この宣言は、一般にMQTT接続のいずれのフェーズで行われてもよい。第1クライアント装置の継承者として指定された第2クライアント装置は、メッセージブローカーからこれらのメッセージを受信して処理する。したがって、第1クライアント装置が受信する予定だったメッセージは、第1クライアント装置がメッセージブローカーに再接続する前に、第2クライアント装置によって受信され処理可能とされてもよい。したがって、この例では、このメッセージ継承、すなわち切断されたクライアントのメッセージを別のクライアントに送り、または再割り当てすることを可能とすることから、クライアント装置が再接続するまでメッセージをメッセージブローカーに記憶しておく必要はない。クライアント装置は、異常切断があった場合、装置の間でメッセージフローを自律的に再編成可能である。このように構成された継承又は転送機構は、例えばクライアント装置が切断された場合でもシステムが緊急データパケットを廃棄しないようにするのに役立つ。
【0039】
第1クライアント装置の継承者を確立するプロセスの例を、
図3を参照して以下説明する。
図3は、第1クライアント装置304がメッセージブローカー306から切断された場合に第1クライアント装置304に送信される予定のメッセージを第2クライアント装置302が受信できるように、第2クライアント装置302を第1クライアント装置304の継承者として確立するプロセス中に、第1クライアント装置304とメッセージブローカー306の間、及び第2クライアント装置302とメッセージブローカー306との間で交換されるメッセージを示す。これらのメッセージの全てが必須ではなく、いくつかの例では、これらのメッセージの一つ以上を省略可能である。この図に示され、本願開示中で述べられるクライアント装置をノードと称する場合がある。このメッセージブローカー306は、サーバであってもよい。メッセージブローカー306は、複数の装置を含んでもよいし、複数の装置にわたって分散配置されてもよい。例えば、メッセージブローカーの機能は、複数のサーバにわたって分散配置されてもよい。
【0040】
第2クライアント装置302は、他のクライアントに送信されるメッセージを受信するのに第2クライアント装置302が利用できることを示すメッセージ308をメッセージブローカーに送信するよう構成される。すなわち、メッセージ308は、第2クライアント装置302が、メッセージブローカー306がサービスを提供する他のクライアント装置の継承者候補として利用可能であることを示す。第2クライアント302に用いられる「継承者」という用語は、第2クライアント302が、メッセージブローカー306中で、第1クライアント304がメッセージブローカー306から切断された場合に、第1クライアント304に送信されるものと表示される一つ以上のメッセージを受信するよう割り当てられるものと示されることを意味する。いくつかの例では、メッセージは、第1クライアント304が異常切断された場合に、第2クライアント302にのみ送られてもよい。第1クライアント装置304は、そのメッセージが、切断時にその継承者に送られることから、被相続/継承クライアントと称されてもよい。
【0041】
メッセージ308は、被継承者通知(notifyAncestor)メッセージ308と呼ぶこともできる。メッセージ308は、メッセージブローカー306が継承者として利用可能であることが示された第2クライアント装置302の身元を判定できるように、第2クライアント装置302のIDを含んでもよい。メッセージ308は、第2クライアント装置302のベンダーのIDを含んでもよい。メッセージブローカーは、このベンダーIDを記憶して、これを、後述するように他のクライアント装置が適切な継承者装置を選択するための補助として用いてもよい。大部分のベンダーがクラウドシステム上で同じMQTTブローカーを用いる可能性があることから、ベンダーIDを読み出すことは、被継承者と継承者とを区別するのに有益であろう。メッセージ308の受信後、メッセージブローカー306は、第2クライアント装置302が継承者として利用可能である旨を記憶してもよい。メッセージブローカー306は、メッセージ308の受信に対して、第2クライアント装置302に受領メッセージ(ACK)を送信するよう構成されてもよい。
【0042】
第1クライアント装置304は、メッセージブローカー306にポーリングして(polls)第1クライアント装置302の継承者クライアントを取得するメッセージ310をメッセージブローカー306に送るよう構成される。このポーリングメッセージは、特殊なトピック/クラスに送信されてもよい。このメッセージ310は、継承者購読(subscribeSuccessors)メッセージと呼ぶこともできる。メッセージ310は、第1クライアント装置304のベンダーのIDを含んでもよい。メッセージブローカー306は、メッセージ310を受信し、第1クライアント装置304の一つ以上の継承者候補を決定するよう構成される。第1クライアント304の継承者候補は、第1クライアントがメッセージブローカー306から異常切断された場合に、第1クライアント304に送信される予定の一つ以上のメッセージを受信するのに利用可能なものである。メッセージブローカー306は、クライアント装置が継承者として利用可能であることを示している場合にのみ、当該クライアント装置を継承者候補と判断してもよい。この例では、第2クライアント302は、自身が継承者として利用可能である旨のメッセージ308を送信していることから、この一つ以上の継承者候補に含まれる可能性がある。メッセージブローカー306は、メッセージ310の受信に対して、第1クライアント装置304に受領メッセージ(ACK)を送信するよう構成されてもよい。
【0043】
メッセージブローカー306は、第1クライアント装置304のベンダーIDと、他のクライアントのベンダーIDとを照合して合致しているか見ることで第1クライアント装置304の適切な継承者を決定してもよい。いくつかの例では、同じベンダーIDを持っている場合にのみ、クライアントは別のクライアントの継承者として機能可能である。このようにするのが望ましいのは、継承者の製造業者が第1クライアント装置304と異なる事態を確実に避けるためである。というのは、異なる製造業者は、異なるメッセージ処理を実装している可能性があるからである。したがって、メッセージブローカー306は、第1クライアント装置304のベンダーIDと一つ以上の継承者のベンダーIDとの間で判明した照合結果に応じて、第1クライアント装置304の一つ以上の継承者クライアント候補を特定してもよい。この例では、第1クライアント304と第2クライアント302とは、同じベンダーIDを有してもよく、第2クライアント302は、第1クライアント304の継承者候補として特定される。
【0044】
メッセージブローカーが一つ以上の第1クライアントの継承者候補を決定した場合、メッセージブローカーは、この一つ以上の継承者候補の表示を含むメッセージ312を第1クライアントに送信するよう構成される。このメッセージ312は、継承者データ(successorData)メッセージと呼ぶこともできる。このメッセージ312は、この一つ以上の継承者候補のそれぞれのIDを含んでもよい。この一つ以上の継承者候補のそれぞれのIDは、一つ以上の継承者候補のそれぞれのMACアドレスを含んでもよい。
【0045】
次に、第1クライアント装置304は、メッセージブローカー306によって示された一つ以上の継承者候補から継承者を選択してもよい。第1クライアント304は、例えば、第2クライアント302を継承者として選択してもよい。次に、第1クライアント装置304は、第1クライアント装置304の継承者とされるべきクライアント装置を示すメッセージ314をメッセージブローカー306に送ってもよい。このメッセージは、接続フェーズで宣言されてもよい。このメッセージ314は、継承者設定(setSuccessor)メッセージであってもよい。メッセージ314の受信に応じて、メッセージブローカー306は、受領メッセージ(ACK)を第1クライアント装置304に送るよう構成されてもよい。メッセージ314は、第2クライアント装置314のベンダーのIDと第2クライアント装置314のIDとを含んでもよい。メッセージブローカー306はメッセージ314を受信し、第2クライアント装置302が第1クライアント装置304の継承者であるとの表示を記憶する。その後、第1クライアント装置304がメッセージブローカー306から切断された場合、メッセージブローカー306は第1クライアント304に送信される予定の一つ以上のメッセージを第2クライアント302に送信してもよい。第2クライアント302は、これら一つ以上のメッセージを受信し、これらを第1クライアント304の代わりに処理する。
【0046】
MQTTプロトコルのブローカーベースのメッセージ配信の性質のため、この継承者設定メッセージを全ての他のクライアントに送る必要はない。例えば、被継承者と継承者との間でのみデータ取得が行われる場合もある。受信した継承者設定メッセージを他の全てのノードにブロードキャストする代わりに、メッセージブローカーは被継承者と継承者とのデータベースを備え、入ってくるメッセージを被継承者クライアント(すなわち、本例での第1クライアント)に送るか、継承者クライアント(すなわち、本例での第2クライアント)に送るかを判断する。
【0047】
メッセージブローカー306に記憶可能なデータ400の例を示す
図4を参照して説明する。第1データ構造402は、第1クライアント304に関する情報を含む一つ以上のフィールドを備える。第2データ構造404は、第1クライアント304の継承者として選択されている第2クライアント302についての情報を含む一つ以上のフィールドを備える。第1データ構造402は、メッセージブローカーが通信するクライアント装置から一義的に識別可能とする第1クライアント304のID(図中、ノードIDとして示す)を含む。このIDは、第1クライアント装置304のMACアドレスであってもよい。第1データ構造402はベンダーID(図中、ベンダーIDとして示す)を含んでもよい。これにより、第1クライアント304の製造業者が識別される。第1データ構造402は、第1クライアント304がメッセージブローカー306に接続されているかメッセージブローカー306から切断されているかの表示(図中IsAliveとして示す)を含んでもよい。メッセージブローカー306は、この表示を用いて、第1クライアント304に送信される予定だったメッセージを第1クライアント304に送るのか(表示が第1クライアントがメッセージブローカーに接続されていることを示す場合)、継承者、すなわち第2クライアント302に送るのか(表示が第2クライアントがメッセージブローカーから切断されていることを示す場合)を判定してもよい。第1クライアント装置304がメッセージブローカーから異常切断されている場合、メッセージブローカー306は、第1クライアント装置304が異常切断されていることを検出するのに応じて、例えばIsAliveフィールドをfalseにセットすることで、このフィールドを、第1クライアント304が異常切断されていることを示すよう設定するよう構成される。
【0048】
第1データ構造402は、第2データ構造404と関連付けられてもよい。これら二つのデータ構造は「外部キー」によって関連付けられてもよい。第2データ構造404は、第1クライアント304のID(図中、nodeIDとして示す)を含んでもよい。このnodeID属性は、外部キーによって第1データ構造402と関連付けられ、二つのデータ構造の間で所定のnodeIDを容易に問い合わせできるようにされてもよい。第2データ構造404は、第2クライアントのID(図中、successorIDとして示す)を含んでもよい。このIDにより第2クライアント304が一義的に識別される。
【0049】
メッセージブローカーによって実行される方法の例を示す
図5を参照して説明する。この方法中の工程の全てが必須ではなく、いくつかの例では、これらの工程の一つ以上を省略可能であることが当業者に理解されよう。
【0050】
S502において、メッセージブローカー306は、第2クライアント302が他のクライアントに送信されることになっているメッセージを受信するのに利用可能であることを示すメッセージを第2クライアント302から受信する。
【0051】
S504において、メッセージブローカーは、第1クライアント304から、第1クライアント304に送信されることになっている一つ以上のメッセージを受信する一つ以上のクライアントが利用できる旨を第1クライアント304に受信する。
【0052】
S506において、メッセージブローカー306は、第1クライアント304から第1クライアント304に送信されることになっている一つ以上のメッセージを受信する第2クライアント302が利用できるかを示すことを求めるメッセージを送信する。
【0053】
S508において、メッセージブローカー306は、第1クライアント304から第2クライアント302を第1クライアント304の継承者として指定する旨を受信する。このメッセージに対し、メッセージブローカー306は第2クライアント装置302が第1クライアント装置304の継承者である旨を記憶する。
【0054】
S510において、メッセージブローカーは、パブリッシャとして機能する第3クライアント装置から一つ以上のメッセージを受信する。これらのメッセージは、第1クライアント304に送信されるものと示される。これらのメッセージは、特定のクラスに属するものであってよく、これらのメッセージが第1クライアント304に送信されるものである旨の表示は、これらのメッセージが第1クライアント304が購読するクラスによって購読される旨の表示を含んでもよい。メッセージブローカー306は、第1クライアント304が一つ以上のメッセージが属するクラスを購読していることを判定することにより、これら一つ以上のメッセージが第1クライアント304に送信されるべきものであると判定してもよい。
【0055】
S512において、メッセージブローカー306は、第1クライアント304がメッセージブローカー306から切断されているかを判定する。これは、第1クライアント304がメッセージブローカー306から異常切断されているかの判定を含んでもよい。メッセージブローカー306は、接続の問題または正常でない切断を検出するのに応じて、第1クライアント304がメッセージブローカー306から異常切断されていることを判定してもよい。
【0056】
S514において、メッセージブローカー306は、第1クライアント304がメッセージブローカー306から切断されていると判定された場合、一つ以上のメッセージを第2クライアント302に送信してもよい。
【0057】
S516において、メッセージブローカー306は、第1クライアント304がメッセージブローカー306に接続されていると判定された場合、一つ以上のメッセージを第1クライアント304に送信する。
【0058】
第1クライアント304によって実行される方法600の例を示す
図6を参照して説明する。この方法中の工程の全てが必須ではなく、いくつかの例では、これらの工程の一つ以上を省略可能であることが当業者に理解されよう。
【0059】
S602において、第1クライアント304は、メッセージブローカー306に、第1クライアント304に送信されることになっている一つ以上のメッセージを受信する一つ以上のクライアントが利用できるかを示すことを求めるメッセージを送信する。
【0060】
S604において、第1クライアント304は、メッセージブローカー306から、第1クライアント304に送信されることになっている一つ以上のメッセージを受信する一つ以上のクライアントが利用できることを示すメッセージを受信する。この一つ以上のクライアントは、本例においては、第2クライアント302を含む。
【0061】
S606において、第1クライアント304は、メッセージブローカー306に、第2クライアント302を第1クライアント304の継承者として指定するメッセージを送信する。第1クライアント304は、このメッセージの送信前に、一つ以上の利用可能なクライアントから第2クライアント302を継承者として選択する。このメッセージは、第1クライアント304がメッセージブローカー306から切断される場合に、route第1クライアント304に送られることになっている一つ以上のメッセージを第2クライアント302に送るようメッセージブローカー306に指示するものであってもよい。
【0062】
S608において、第1クライアント304はメッセージブローカー306から切断される。この切断は、異常切断であってもよい。
【0063】
継承者クライアント、本例では第2クライアント302で実行可能な方法を示す
図7を参照して説明する。この方法中の工程の全てが必須ではなく、いくつかの例では、これらの工程の一つ以上を省略可能であることが当業者に理解されよう。
【0064】
S702において、第2クライアント302は、メッセージブローカー306に、他のクライアントに送信されることになっているメッセージを第2クライアント302によって受信可能であることを示すメッセージを送信するよう構成される。
【0065】
S704において、第2クライアント302は、メッセージブローカー306から、第1クライアント304に送信されることになっていた一つ以上のメッセージを受信するよう構成される。第2クライアント302は、第1クライアント304の代わりにこれらのメッセージを処理してもよい。
【0066】
出版-購読通信システムを模式的に示す
図8を参照して説明する。この図は、メッセージを他のクライアントに送信するパブリッシャとして機能するよう構成される第3クライアント804も示す。第1クライアント806は、
図3を参照して上述された第1クライアント304と同じであり同じ機能を果たしてもよい。第2クライアント808は、
図3を参照して上述された第2クライアント302と同じであり同じ機能を果たしてもよい。メッセージブローカー802は、
図3を参照して上述されたメッセージブローカー306と同じであり同じ機能を果たしてもよい。この例では、第1クライアント806は、第3クライアント804によって送信されたクラスのメッセージを購読している。
【0067】
図中に示される数(1)によって表されるメッセージは、第2クライアント808を第1クライアント806の継承者として確立するために第1クライアント806から送信される通知/購読メッセージ(例えば、被継承者通知、継承者購読、継承者データ、継承者設定)を表す。第1クライアント806がメッセージブローカー802に接続している場合、第3クライアント804は、ブローカー802を介して第1クライアント806に一つ以上のメッセージ(図中、メッセージ(2)によって表される)を送信する。しかし、第1クライアント806がメッセージブローカー802との接続を失った場合、(その示されたクラス/トピックにより)第1クライアント806に送信されることになっている次の一つ以上のメッセージ(図中メッセージ(3)としてあらわされる)は、継承者宣言に応じてブローカー802によって第2クライアント808に転送/送信される。この使用シナリオにより、第3クライアント804のメッセージが、第2クライアントに関連するクライアントに何らかの形で配信されて処理可能となるか、他のノードに報知されることで当該メッセージが無駄にならないようになる。
【0068】
プロセッサ、プロセシングシステムまたは回路と本明細書に記載されるものは、実務上、単一のチップまたは集積回路により実装されても、複数のチップまたは集積回路により実装されてもよく、あるいはチップセット、特定用途向け集積回路(ASIC)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、デジタル・シグナル・プロセッサ(DSP)、グラフィクス・プロセッシング・ユニット(GPUs)等によって実装されてもよい。このチップまたは複数のチップは、実施例にしたがって動作するよう構成可能なデータプロセッサおよびデジタル・シグナル・プロセッサの少なくとも一方を実装するための回路(ならびに場合によってファームウェア)を備えてもよい。この点に関し、例示的実施例は、少なくとも部分的に(不揮発性)メモリーに記憶されプロセッサにより実行可能なコンピュータソフトウェア、ハードウェア、または実体的に記憶されたソフトウェアとハードウェア(および実体的に記憶されたファームウェア)との組み合わせにより実装されてもよい。
【0069】
データ記憶用のデータ記憶装置について本明細書に記載する。これは、単一の装置または複数の装置により実装されてもよい。適切な装置としては、例えばハードディスクおよび不揮発性半導体メモリーが挙げられる。
【0070】
明細書中ではMQTT(Message Queue Telemetry Transport)プロトコルが言及されているものの、これは単なる例であり、本願開示のいくつかの例では、他のプロトコルのユーザを含んでもよいことが当業者には理解されるであろう。
【0071】
本明細書に記載される例は、本発明の実施形態を説明するための例として理解されるべきである。別の実施形態および例が想定される。一つの例または実施形態に関して記載される任意の特徴は、単独で、またはほかの特徴と組み合わせて使用可能である。加えて、一つの例または実施形態に関連して記載された任意の特徴は、他の例または実施形態、または他の例または実施形態の任意の組み合わせのいずれかの特徴と組み合わせても使用可能である。さらに、本明細書に記載されない均等物および変形例も、請求項に定義される本発明の範囲内で利用可能である。