(57)【要約】【課題】所定のプロトコルを用いたメッセージ送受信において、メッセージ処理の分散を実現すること。【解決手段】サブスクライバーとしてそれぞれ機能する複数のメッセージ処理装置と、前記複数のメッセージ処理装置にメッセージを配信するメッセージブローカーとして機能するブローカー装置と、前記複数のメッセージ処理装置間で共有される情報を記憶する共有記憶装置とが含まれるメッセージ処理システムであって、前記複数のメッセージ処理装置のそれぞれは、前記ブローカー装置から配信されたメッセージを受信する受信手段と、前記共有記憶装置に記憶されている、メッセージ処理装置を示す情報と該メッセージ処理装置の優先度とが対応付けられた処理調整情報を参照して、前記複数のメッセージ処理装置のうち、自身の優先度が最も高いか否かを判定する実行制御手段と、前記実行制御手段により自身の優先度が最も高いと判定された場合、前記受信手段が受信したメッセージに対して所定の処理を実行するメッセージ処理手段と、を有することを特徴とする。【選択図】図３
2019160274.tif 000002
【特許請求の範囲】
【請求項１】
サブスクライバーとしてそれぞれ機能する複数のメッセージ処理装置と、前記複数のメッセージ処理装置にメッセージを配信するメッセージブローカーとして機能するブローカー装置と、前記複数のメッセージ処理装置間で共有される情報を記憶する共有記憶装置とが含まれるメッセージ処理システムであって、
前記複数のメッセージ処理装置のそれぞれは、
前記ブローカー装置から配信されたメッセージを受信する受信手段と、
前記共有記憶装置に記憶されている、メッセージ処理装置を示す情報と該メッセージ処理装置の優先度とが対応付けられた処理調整情報を参照して、前記複数のメッセージ処理装置のうち、自身の優先度が最も高いか否かを判定する実行制御手段と、
前記実行制御手段により自身の優先度が最も高いと判定された場合、前記受信手段が受信したメッセージに対して所定の処理を実行するメッセージ処理手段と、
を有することを特徴とするメッセージ処理システム。
【請求項２】
前記実行制御手段は、
前記複数のメッセージ処理装置のうち、自身の優先度が最も高いと判定した場合、前記共有記憶装置に記憶されている、前記所定の処理の実行状態を管理するための処理管理情報を、前記受信手段が受信したメッセージに対する所定の処理が実行中であることを示す情報に更新し、
前記メッセージ処理手段により前記メッセージに対する所定の処理が完了した場合、前記処理管理情報を、前記メッセージに対する所定の処理が完了したことを示す情報に更新する、
ことを特徴とする請求項１に記載のメッセージ処理システム。
【請求項３】
前記実行制御手段は、
前記複数のメッセージ処理装置のうち、自身の優先度が最も高いと判定しなかった場合、前記処理管理情報を参照して、他のメッセージ処理装置で実行が開始された前記所定の処理が所定の時間経過後も実行中であるか否かを判定し、
前記所定の処理が所定の時間経過後も実行中であると判定した場合、前記処理調整情報を更新する、
ことを特徴とする請求項２に記載のメッセージ処理システム。
【請求項４】
前記実行制御手段は、
前記処理調整情報に含まれる優先度のうち、前記他のメッセージ処理装置に対応付けられている優先度を、前記複数のメッセージ処理装置で最も低くなるように更新する、
ことを特徴とする請求項３に記載のメッセージ処理システム。
【請求項５】
前記実行制御手段は、
前記処理調整情報が更新された場合、更新後の処理調整情報を参照して、前記複数のメッセージ処理装置のうち、自身の優先度が最も高いか否かを判定する、
ことを特徴とする請求項３又は４に記載のメッセージ処理システム。
【請求項６】
前記メッセージ処理システムには、前記複数のメッセージ処理装置が購読するトピックを制御する購読制御装置が含まれ、
前記購読制御装置は、
前記複数のメッセージ処理装置のうちの一のメッセージ処理装置の稼働停止を検知すると、該一のメッセージ処理装置とは異なる他のメッセージ処理装置に対して、前記一のメッセージ処理装置が購読していたトピックの購読を依頼する第１の依頼手段と、
前記複数のメッセージ処理装置のうち、最も優先度が低いメッセージ処理装置のリソース使用量が低負荷状態となったことを検知すると、前記最も優先度が低いメッセージ処理装置のトピックの購読解除を依頼する第２の依頼手段と、
を有することを特徴とする請求項１乃至５の何れか一項に記載のメッセージ処理システム。
【請求項７】
前記第１の依頼手段は、
前記複数のメッセージ処理装置のリソース使用量が高負荷状態となったことを検知すると、前記他のメッセージ処理装置に対して、前記トピックの行動を依頼する、ことを特徴とする請求項６に記載のメッセージ処理システム。
【請求項８】
サブスクライバーとしてそれぞれ機能する複数のメッセージ処理装置と、前記複数のメッセージ処理装置にメッセージを配信するメッセージブローカーとして機能するブローカー装置と、前記複数のメッセージ処理装置間で共有される情報を記憶する共有記憶装置とが含まれるメッセージ処理システムであって、
前記複数のメッセージ処理装置のそれぞれは、
前記ブローカー装置から配信されたメッセージを受信する受信手段と、
前記共有記憶装置に記憶されている、メッセージ処理装置を示す情報と前記メッセージの一部のデータ範囲を示す割当範囲とが対応付けられた処理調整情報を参照して、自身に割当範囲が対応付けられているか否かを判定する実行制御手段と、
前記実行制御手段により自身に割当範囲が対応付けられていると判定された場合、前記受信手段が受信したメッセージのうちの前記割当範囲に対して所定の処理を実行するメッセージ処理手段と、
を有することを特徴とするメッセージ処理システム。
【請求項９】
前記実行制御手段は、
前記実行制御手段により自身に割当範囲が対応付けられていると判定した場合、前記共有記憶装置に記憶されている、前記所定の処理の実行状態を管理するための処理管理情報を、前記受信手段が受信したメッセージのうちの前記割当範囲に対する所定の処理が実行中であることを示す情報に更新し、
前記メッセージ処理手段により前記メッセージのうちの前記割当範囲に対する所定の処理が完了した場合、前記処理管理情報を、前記メッセージのうちの前記割当範囲に対する所定の処理が完了したことを示す情報に更新する、
ことを特徴とする請求項８に記載のメッセージ処理システム。
【請求項１０】
前記実行制御手段は、
前記実行制御手段により自身に割当範囲が対応付けられていないと判定した場合、前記処理管理情報を参照して、他のメッセージ処理装置で実行が開始された前記所定の処理が所定の時間経過後も実行中であるか否かを判定し、
前記所定の処理が所定の時間経過後も実行中であると判定した場合、前記処理調整情報を更新する、
ことを特徴とする請求項９に記載のメッセージ処理システム。
【請求項１１】
前記実行制御手段は、
前記処理調整情報に含まれる割当範囲のうち、前記他のメッセージ処理装置に対応付けられている割当範囲を、前記他のメッセージ処理装置以外のメッセージ処理装置に対して対応付けるように更新する、
ことを特徴とする請求項１０に記載のメッセージ処理システム。
【請求項１２】
前記実行制御手段は、
前記処理調整情報が更新された場合、更新後の処理調整情報を参照して、自身に割当範囲が対応付けられているか否かを判定する
ことを特徴とする請求項１０又は１１に記載のメッセージ処理システム。
【請求項１３】
サブスクライバーとしてそれぞれ機能し、１以上の他のメッセージ処理装置との間で共有される情報を記憶する共有記憶装置と接続されるメッセージ処理装置であって、
メッセージブローカーとして機能するブローカー装置から配信されたメッセージを受信する受信手段と、
前記共有記憶装置に記憶されている、メッセージ処理装置を示す情報と該メッセージ処理装置の優先度とが対応付けられた処理調整情報を参照して、前記１以上の他のメッセージ処理装置の優先度よりも自身の優先度の方が高いか否かを判定する実行制御手段と、
前記実行制御手段により自身の優先度の方が高いと判定された場合、前記受信手段が受信したメッセージに対して所定の処理を実行するメッセージ処理手段と、
を有することを特徴とするメッセージ処理装置。
【請求項１４】
サブスクライバーとしてそれぞれ機能し、１以上の他のメッセージ処理装置との間で共有される情報を記憶する共有記憶装置と接続されるメッセージ処理装置であって、
メッセージブローカーとして機能するブローカー装置から配信されたメッセージを受信する受信手段と、
前記共有記憶装置に記憶されている、メッセージ処理装置を示す情報と前記メッセージの一部のデータ範囲を示す割当範囲とが対応付けられた処理調整情報を参照して、自身に割当範囲が対応付けられているか否かを判定する実行制御手段と、
前記実行制御手段により自身に割当範囲が対応付けられていると判定された場合、前記受信手段が受信したメッセージのうちの前記割当範囲に対して所定の処理を実行するメッセージ処理手段と、
を有することを特徴とするメッセージ処理装置。
【請求項１５】
サブスクライバーとしてそれぞれ機能し、１以上の他のメッセージ処理装置との間で共有される情報を記憶する共有記憶装置と接続されるメッセージ処理装置が、
メッセージブローカーとして機能するブローカー装置から配信されたメッセージを受信する受信手順と、
前記共有記憶装置に記憶されている、メッセージ処理装置を示す情報と該メッセージ処理装置の優先度とが対応付けられた処理調整情報を参照して、前記１以上の他のメッセージ処理装置の優先度よりも自身の優先度の方が高いか否かを判定する実行制御手順と、
前記実行制御手順により自身の優先度の方が高いと判定された場合、前記受信手順が受信したメッセージに対して所定の処理を実行するメッセージ処理手順と、
を実行することを特徴とするメッセージ処理方法。
【請求項１６】
サブスクライバーとしてそれぞれ機能し、１以上の他のメッセージ処理装置との間で共有される情報を記憶する共有記憶装置と接続されるメッセージ処理装置が、
メッセージブローカーとして機能するブローカー装置から配信されたメッセージを受信する受信手順と、
前記共有記憶装置に記憶されている、メッセージ処理装置を示す情報と前記メッセージの一部のデータ範囲を示す割当範囲とが対応付けられた処理調整情報を参照して、自身に割当範囲が対応付けられているか否かを判定する実行制御手順と、
前記実行制御手順により自身に割当範囲が対応付けられていると判定された場合、前記受信手順が受信したメッセージのうちの前記割当範囲に対して所定の処理を実行するメッセージ処理手順と、
を実行することを特徴とするメッセージ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メッセージ処理システム、メッセージ処理装置及びメッセージ処理方法に関する。
【背景技術】
【０００２】
非同期にメッセージを送受信する手法として、出版−購読型モデル（これは、「Ｐｕｂｌｉｓｈ／Ｓｕｂｓｃｒｉｂｅモデル」とも称される。以降、「Ｐｕｂ／Ｓｕｂモデル」と表す。）と呼ばれる手法が知られている。Ｐｕｂ／Ｓｕｂモデルは、一般に、メッセージを送信するパブリッシャーと、メッセージを受信するサブスクライバーと、パブリッシャーとサブスクライバーとの間のメッセージを仲介するメッセージブローカーとによって構成される。Ｐｕｂ／Ｓｕｂモデルでは、パブリッシャーがトピックを宛先に指定したメッセージをメッセージブローカーに送信（出版）し、メッセージブローカーが当該トピックを購読しているサブスクライバーに対して当該メッセージを配信することで、メッセージの送受信が行われる。
【０００３】
Ｐｕｂ／Ｓｕｂモデルでは、例えば、クライアント／サーバモデル等のようにデータの送信者と受信者とが直接通信を行う手法よりも、より柔軟に受信者（サブスクライバー）と送信者（パブリッシャー）とを分離することが可能である。このため、Ｐｕｂ／Ｓｕｂモデルを採用したプロトコルとして、例えば、メッセージブローカーが、同一の処理を実行する複数のサブスクライバーの中から１つのサブスクライバーを選択し、選択したサブスクライバーに対してメッセージを配信するプロトコルも存在している。このようなプロトコルとしては、例えば、ＪＭＳ（Java Message Service）  ２．０やＡＭＱＰ（Advanced Message Queuing Protocol）等が知られている。
【０００４】
ところで、近年、センサや通信費用が安価になってきたことに伴い、多くのセンサを様々な箇所に取り付け等することで様々な情報を収集し、これら収集した情報を活用する仕組み（いわゆるＩｏＴ（Internet of Things））が知られるようになってきた。ＩｏＴでは、多数のセンサや簡易な計測装置によって多くの通信が行われるため、高い処理性能を確保する必要性があり、軽量なプロトコルを用いることが好ましい。これに対して、Ｐｕｂ／Ｓｕｂモデルを採用したＭＱＴＴ（Message Queuing Telemetry Transport）  Ｖ３．１／Ｖ３．１．１等の軽量なプロトコルが知られている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２０１３／１４５４６７号
【特許文献２】特開２００１−１４７８２５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、例えば、ＭＱＴＴ  Ｖ３．１／Ｖ３．１．１等のプロトコルは、プロトコル自体が簡易であるためパブリッシャーやメッセージブローカーは比較的高い処理性能を確保することができる一方で、特定のトピックに対して多数のメッセージが送信された場合等にサブスクライバーは処理を分散することができず、高い処理性能を確保することが困難なことがあった。
【０００７】
これに対して、同一の処理の処理を実行する複数のサブスクライバーを用いて処理を分散することが考えられる。しかしながら、ＭＱＴＴ  Ｖ３．１／Ｖ３．１．１等のプロトコルは、ＪＭＳ  ２．０やＡＭＱＰ等と異なり、複数のサブスクライバーの中から１つのサブスクライバーを選択する仕組みを備えておらず、同一のトピックを購読している全てのサブスクライバーに対してメッセージが送信される。このため、これら全てのサブスクライバーそれぞれが同一のメッセージを処理することになり、処理の分散を図ることができないだけでなく、意図しない処理結果となってしまう場合がある。
【０００８】
したがって、ＭＱＴＴ  Ｖ３．１／Ｖ３．１．１等のプロトコルを用いて、複数のサブスクライバーで処理の分散を実現することができれば好ましい。
【０００９】
本発明の一実施形態は、上記の点に鑑みてなされたもので、所定のプロトコルを用いたメッセージ送受信において、メッセージ処理の分散を実現することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するため、本発明の一実施形態は、サブスクライバーとしてそれぞれ機能する複数のメッセージ処理装置と、前記複数のメッセージ処理装置にメッセージを配信するメッセージブローカーとして機能するブローカー装置と、前記複数のメッセージ処理装置間で共有される情報を記憶する共有記憶装置とが含まれるメッセージ処理システムであって、前記複数のメッセージ処理装置のそれぞれは、前記ブローカー装置から配信されたメッセージを受信する受信手段と、前記共有記憶装置に記憶されている、メッセージ処理装置を示す情報と該メッセージ処理装置の優先度とが対応付けられた処理調整情報を参照して、前記複数のメッセージ処理装置のうち、自身の優先度が最も高いか否かを判定する実行制御手段と、前記実行制御手段により自身の優先度が最も高いと判定された場合、前記受信手段が受信したメッセージに対して所定の処理を実行するメッセージ処理手段と、を有することを特徴とする。
【発明の効果】
【００１１】
本発明の一実施形態によれば、所定のプロトコルを用いたメッセージ送受信において、メッセージ処理の分散を実現することができる。
【図面の簡単な説明】
【００１２】
【図１】第一の実施形態に係るメッセージ処理システムの全体構成の一例を示す図である。
【図２】コンピュータのハードウェア構成の一例を示す図である。
【図３】第一の実施形態に係るメッセージ処理システムの機能構成の一例を示す図（実施例１）である。
【図４】処理調整情報の一例を示す図（実施例１）である。
【図５】処理管理情報の一例を示す図（実施例１）である。
【図６】第一の実施形態に係るメッセージ処理装置が実行する処理（メッセージ処理の実行制御処理）の一例を示すフローチャート（実施例１）である。
【図７】メッセージ処理を引き継ぐ場合の一例を模式的に説明する図である。
【図８】第一の実施形態に係るメッセージ処理システムの機能構成の一例を示す図（実施例２）である。
【図９】処理割当情報の一例を示す図（実施例２）である。
【図１０】処理管理情報の一例を示す図（実施例２）である。
【図１１】第一の実施形態に係るメッセージ処理装置が実行する処理（メッセージ処理の実行制御処理）の一例を示すフローチャート（実施例２）である。
【図１２】第二の実施形態に係るメッセージ処理システムの全体構成の一例を示す図である。
【図１３】第二の実施形態に係るメッセージ処理システムの機能構成の一例を示す図である。
【図１４】第二の実施形態に係るメッセージ処理システムの全体処理の一例を示すシーケンス図（通常時）である。
【図１５】第二の実施形態に係るメッセージ処理システムの全体処理の一例を示すシーケンス図（異常発生時）である。
【図１６】第二の実施形態に係るメッセージ処理システムの全体処理の一例を示すシーケンス図（高負荷時）である。
【図１７】第二の実施形態に係るメッセージ処理システムの全体処理の一例を示すシーケンス図（低負荷時）である。
【発明を実施するための形態】
【００１３】
以下、本発明の実施の形態（実施形態）について説明する。以降の各実施形態では、例えばＭＱＴＴ  Ｖ３．１／Ｖ３．１．１等のプロトコル（すなわち、同一の処理を実行する複数のサブスクライバーの中から１つのサブスクライバーを選択する仕組みを備えていないプロトコル）を用いて送受信されるメッセージを処理するメッセージ処理システム１について説明する。なお、このようなプロトコルは、ＭＱＴＴ  Ｖ３．１／Ｖ３．１．１以外にも、例えば、ＪＭＳ１．０等が挙げられる。
【００１４】
［第一の実施形態］
＜全体構成＞
まず、本実施形態に係るメッセージ処理システム１の全体構成について、図１を参照しながら説明する。図１は、第一の実施形態に係るメッセージ処理システム１の全体構成の一例を示す図である。
【００１５】
図１に示すように、本実施形態に係るメッセージ処理システム１には、複数のメッセージ処理装置１０と、１以上のメッセージブローカー装置２０と、複数のメッセージ送信装置３０と、共有情報管理装置４０とが含まれる。メッセージ処理装置１０とメッセージブローカー装置２０とは、例えば、ネットワークや仮想的なネットワーク、プロセス間通信、内部配線等によってメッセージが送受信可能に接続される。同様に、メッセージブローカー装置２０とメッセージ送信装置３０とは、例えば、ネットワークや仮想的なネットワーク、プロセス間通信、内部配線等によってメッセージが送受信可能に接続される。また、同様に、メッセージ処理装置１０と共有情報管理装置４０は、例えば、ネットワークや仮想的なネットワーク、プロセス間通信、内部配線等によって通信可能に接続される。
【００１６】
メッセージ処理装置１０は、Ｐｕｂ／Ｓｕｂモデルにおけるサブスクライバーとして機能する各種装置である。サブスクライバーとして機能する装置としては、例えば、アプリケーションサーバ等として機能する装置等が挙げられる。
【００１７】
メッセージ処理装置１０は、メッセージブローカー装置２０から送信（配信）されたメッセージに対して所定の処理を行う。ここで、本実施形態では、複数のメッセージ処理装置１０は、同一のメッセージに対して同一の処理を行うものとする。
【００１８】
なお、１つの物理的な装置が１つのメッセージ処理装置１０として機能する必要は必ずしもなく、例えば、１つ物理的な装置が複数のメッセージ処理装置１０として機能しても良い。言い換えれば、物理的な装置をメッセージ処理装置１０として機能させるプログラムが、この物理的な装置に複数インストールされていても良い。
【００１９】
以降では、複数のメッセージ処理装置１０の各々を区別して表す場合は、「メッセージ処理装置１０−１」、「メッセージ処理装置１０−２」等と表す。
【００２０】
メッセージブローカー装置２０は、Ｐｕｂ／Ｓｕｂモデルにおけるメッセージブローカーとして機能する各種装置である。メッセージブローカー装置２０は、トピックが宛先に指定されたメッセージをメッセージ送信装置３０から受信する。そして、メッセージブローカー装置２０は、予め当該トピックの購読を登録しているメッセージ処理装置１０に対して、当該メッセージを送信（配信）する。メッセージブローカーとして機能する装置としては、例えば、ＨＵＢやデータ集約サーバ、コンセントレータ等として機能する装置等が挙げられる。
【００２１】
なお、メッセージブローカー装置２０は、例えば、メッセージ送信装置３０から受信したメッセージを、トピック毎に、キュー等の記憶領域に格納した上で、この記憶領域に所定数のメッセージが格納された場合や記憶領域の容量が所定容量になった場合又は所定の時間経過後等に、この記憶領域に格納されているメッセージをメッセージ処理装置１０に送信する。
【００２２】
メッセージ送信装置３０は、Ｐｕｂ／Ｓｕｂモデルにおけるパブリッシャーとして機能する各種装置である。パブリッシャーとして機能する装置としては、例えば、各種センサやエッジデバイス、ＰＬＣ（Programmable Logic Controller）や各種コントローラ等の制御装置等が挙げられる。
【００２３】
メッセージ送信装置３０は、例えば、トピックを宛先に指定したメッセージをメッセージブローカー装置２０に送信する。このメッセージには、メッセージ送信装置３０に応じた種々のデータ（例えば、センシング対象をセンシングしたデータ、操作対象に対する操作ログデータ等）が含まれる。
【００２４】
共有情報管理装置４０は、各メッセージ処理装置１０が参照する情報を管理する装置である。共有情報管理装置４０は、例えば、データベースサーバやネットワークストレージサーバ、共有メモリとして機能する装置等により実現される。
【００２５】
各メッセージ処理装置１０は、共有情報管理装置４０で管理されている情報を参照することで、メッセージブローカー装置２０から受信したメッセージを自身で処理するか否かを判定する。
【００２６】
すなわち、例えば、或るトピックの購読を登録しているメッセージ処理装置１０が複数存在する場合、メッセージブローカー装置２０は、当該トピックが宛先に指定されたメッセージを、これら複数のメッセージ処理装置１０に送信（配信）する。そこで、本実施形態では、これら複数のメッセージ処理装置１０それぞれが当該メッセージを自身で処理するか否かを判定することで、これら複数のメッセージ処理装置１０のうちの１つのメッセージ処理装置１０のみが当該メッセージを処理するように制御する。
【００２７】
これにより、本実施形態に係るメッセージ処理システム１では、複数のメッセージ処理装置１０間で複数のメッセージを分散して処理することができるようになる。より具体的には、例えば、複数のメッセージ処理装置１０がそれぞれ複数のトピックの購読を登録している場合、或るトピックのメッセージについてはメッセージ処理装置１０−１が処理し、他の或るトピックのメッセージについてはメッセージ処理装置１０−２が処理する等のように、メッセージを処理するメッセージ処理装置１０を分散させることができる。
【００２８】
また、上記のように、複数のメッセージ処理装置１０のうちの１つのメッセージ処理装置１０のみがメッセージを処理することで、例えば、同一のメッセージが複数のメッセージ処理装置１０により処理されてしまい、意図しない処理結果となってしまう事態を防止することができる。
【００２９】
このように、本実施形態に係るメッセージ処理システム１では、複数のメッセージについて、メッセージの処理結果の整合性を確保しつつ、複数のメッセージ処理装置１０間でメッセージ処理を分散させる。また、このようなメッセージ処理の分散によって、複数のメッセージ処理装置１０で異なるメッセージの処理を並列に行うことができるようになる。したがって、本実施形態に係るメッセージ処理システム１によれば、システム全体で高い処理性能（例えば、単位時間あたりのメッセージ処理数）を確保することができるようになる。
【００３０】
＜ハードウェア構成＞
次に、本実施形態に係るメッセージ処理装置１０及び共有情報管理装置４０のハードウェア構成について説明する。これらの装置は、例えば、図２に示すコンピュータ６００のハードウェア構成により実現される。図２は、コンピュータ６００のハードウェア構成の一例を示す図である。
【００３１】
図２に示すコンピュータ６００は、入力装置６０１と、表示装置６０２と、外部Ｉ／Ｆ６０３と、通信Ｉ／Ｆ６０４と、ＲＯＭ（Read Only Memory）６０５と、ＲＡＭ（Random Access Memory）６０６と、ＣＰＵ（Central Processing Unit）６０７と、記憶装置６０８とを有する。これら各ハードウェアは、それぞれがバス６０９で通信可能に接続されている。
【００３２】
入力装置６０１は、キーボードやマウス、タッチパネル、各種ボタン等であり、ユーザが各種操作を入力するのに用いられる。表示装置６０２は、例えばディスプレイ等であり、処理結果等を表示する。なお、コンピュータ６００は、入力装置６０１及び表示装置６０２のうちの少なくとも一方を有していなくても良い。
【００３３】
外部Ｉ／Ｆ６０３は、外部装置とのインタフェースである。外部装置には、記録媒体６０３ａ等がある。コンピュータ６００は、記録媒体６０３ａ等の読み取りや書き込み等を行うことができる。記録媒体６０３ａには、例えば、フレキシブルディスク、ＣＤ、ＤＶＤ、ＳＤメモリカード、ＵＳＢメモリ等がある。
【００３４】
通信Ｉ／Ｆ６０４は、コンピュータ６００が他の装置と通信するためのインタフェースである。ＲＯＭ６０５は、電源を切ってもプログラムやデータを保持することができる不揮発性の半導体メモリである。ＲＯＭ６０５には、例えば、ＯＳ（Operating System）設定やネットワーク設定等が格納されている。ＲＡＭ６０６は、プログラムやデータを一時保持する揮発性の半導体メモリである。
【００３５】
ＣＰＵ６０７は、ＲＯＭ６０５や記憶装置６０８等からプログラムやデータをＲＡＭ６０６上に読み出し、処理を実行することで、コンピュータ６００全体の制御や機能を実現する演算装置である。
【００３６】
記憶装置６０８は、例えばＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）等の不揮発性のメモリであり、プログラムやデータを格納している。記憶装置６０８に格納されるプログラムやデータには、コンピュータ６００全体を制御する基本ソフトウェアであるＯＳ、ＯＳ上において各種機能を提供するアプリケーションプログラム等がある。なお、記憶装置６０８は、格納しているプログラムやデータを所定のファイルシステムやＤＢ（デーベース）等により管理している。
【００３７】
本実施形態に係るメッセージ処理装置１０及び共有情報管理装置４０は、例えば図２に示すコンピュータ６００のハードウェア構成により、後述する各種処理を実現することができる。なお、本実施形態に係るメッセージ処理装置１０及び共有情報管理装置４０は、例えば、複数台のコンピュータ６００を組み合わせたハードウェア構成により実現されていても良い。
【００３８】
（実施例１）
以降では、本実施形態に係るメッセージ処理システム１の実施例１について説明する。
【００３９】
＜機能構成＞
まず、実施例１におけるメッセージ処理システム１の機能構成について、図３を参照しながら説明する。図３は、第一の実施形態に係るメッセージ処理システム１の機能構成の一例を示す図（実施例１）である。
【００４０】
図３に示すように、実施例１におけるメッセージ処理装置１０は、メッセージ送受信部１１０と、実行制御部１２０と、メッセージ処理部１３０とを有する。これら各部は、メッセージ処理装置１０にインストールされた１以上のプログラムがＣＰＵに実行させる処理により実現される。
【００４１】
メッセージ送受信部１１０は、例えばＭＱＴＴ  Ｖ３．１／Ｖ３．１．１等のプロトコルに従って、メッセージの送受信を行う。すなわち、メッセージ送受信部１１０は、トピックの購読を登録するためのメッセージ（購読登録メッセージ）をメッセージブローカー装置２０に送信する。購読登録メッセージには、購読対象のトピックと、自身を識別する識別情報（すなわち、このトピックを購読するメッセージ処理装置１０の装置ＩＤ等）とが指定される。
【００４２】
また、メッセージ送受信部１１０は、メッセージブローカー装置２０から配信されたメッセージを受信する。なお、上述したように、メッセージブローカー装置２０は、メッセージ送信装置３０から受信したメッセージを、このメッセージのトピックの購読を登録しているメッセージ処理装置１０に配信する。
【００４３】
実行制御部１２０は、メッセージ送受信部１１０によりメッセージが受信された場合、共有情報管理装置４０で管理される情報（後述する処理調整情報１０００）を参照して、当該メッセージを処理するか否かを判定する。
【００４４】
また、実行制御部１２０は、当該メッセージを処理しないと判定した場合（すなわち、当該メッセージが他のメッセージ処理装置１０により処理される場合）、共有情報管理装置４０で管理される情報（後述する処理管理情報２０００）を参照して、他のメッセージ処理装置１０による処理が完了したか否かを判定する。そして、実行制御部１２０は、当該他のメッセージ処理装置１０による処理が完了せずに所定の時間経過した場合（すなわち、例えば、他のメッセージ処理装置１０に障害等が発生し、当該メッセージの処理が完了しなかった場合）、当該他のメッセージ処理装置１０以外のメッセージ処理装置１０により当該メッセージが処理されるように制御する。
【００４５】
メッセージ処理部１３０は、実行制御部１２０によりメッセージを処理すると判定された場合、当該メッセージに応じた処理を行う。
【００４６】
なお、メッセージに対する処理（メッセージ処理）の処理内容は、メッセージ処理システム１の種類やメッセージの内容等によって異なるが、例えば、メッセージに含まれるデータを加工する、メッセージに含まれるデータ（又は当該加工後のデータ）を所定のＤＢサーバに格納する、メッセージに含まれるデータから何等かの判定を行った上で当該判定結果を所定の装置に通知する等が挙げられる。
【００４７】
図３に示すように、実施例１における共有情報管理装置４０は、記憶部４１０を有する。当該記憶部は、例えば、記憶装置等を用いて実現可能である。
【００４８】
記憶部４１０には、処理調整情報１０００と、処理管理情報２０００とが記憶されている。
【００４９】
ここで、処理調整情報１０００の詳細について、図４を参照しながら説明する。図４は、処理調整情報１０００の一例を示す図（実施例１）である。
【００５０】
図４に示すように、処理調整情報１０００は、１以上のレコードで構成される。また、各レコードには、トピックＩＤと、装置ＩＤと、優先度と、稼働状態とが含まれる。
【００５１】
トピックＩＤは、トピックを識別する識別情報である。処理調整情報１０００を構成する各レコードは、トピックＩＤによって特定される。
【００５２】
装置ＩＤは、当該トピックＩＤにより識別されるトピックを購読登録しているメッセージ処理装置１０を識別する識別情報である。優先度は、当該トピックＩＤにより識別されるトピックのメッセージを処理するメッセージ処理装置１０の優先度である。稼働状態は、当該装置ＩＤの稼働状態（例えば、メッセージ処理装置１０が稼働していることを示す「稼働」、メッセージ処理装置１０が停止していることを示す「停止」等）である。
【００５３】
例えば、図４に示す例では、トピックＩＤ「Ｔ００１」のレコードには、装置ＩＤ「Ｄ００１」、「Ｄ００２」、「Ｄ００３」が含まれ、これらの装置ＩＤには、それぞれ優先度「１」、「２」、「３」と稼働状態「稼働」、「稼働」、「稼働」とが対応付けられている。これは、装置ＩＤ「Ｄ００１」、「Ｄ００２」、「Ｄ００３」のメッセージ処理装置１０は、トピックＩＤ「Ｔ００１」のトピックを購読しており、これらのメッセージ処理装置１０の優先度はそれぞれ「１」、「２」、「３」であり、かつ、これらのメッセージ処理装置１０の稼働状態は全て「稼働」であることを示している。この場合、これらのメッセージ処理装置１０に対して、トピックＩＤ「Ｔ００１」のトピックが指定されたメッセージが配信されると、例えば、最も優先度が高い優先度「１」のメッセージ処理装置１０（装置ＩＤ「Ｄ００１」のメッセージ処理装置１０）が当該メッセージを処理することになる。
【００５４】
また、例えば、図４に示す例では、トピックＩＤ「Ｔ００２」のレコードには、装置ＩＤ「Ｄ００１」、「Ｄ００２」、「Ｄ００４」が含まれ、これらの装置ＩＤには、それぞれ優先度「２」、「３」、「１」と稼働状態「稼働」、「停止」、「稼働」とが対応付けられている。これは、装置ＩＤ「Ｄ００１」、「Ｄ００２」、「Ｄ００４」のメッセージ処理装置１０は、トピックＩＤ「Ｔ００２」のトピックを購読しており、これらのメッセージ処理装置１０の優先度はそれぞれ「２」、「３」、「１」であり、かつ、これらのメッセージ処理装置１０の稼働状態はそれぞれ「稼働」、「停止」、「稼働」であることを示している。この場合、これらのメッセージ処理装置１０に対して、トピックＩＤ「Ｔ００２」のトピックが指定されたメッセージが配信されると、例えば、最も優先度が高い優先度「１」のメッセージ処理装置１０（装置ＩＤ「Ｄ００４」のメッセージ処理装置１０）が当該メッセージを処理することになる。
【００５５】
このように、処理調整情報１０００は、トピック毎に、当該トピックのメッセージを処理すべきメッセージ処理装置１０の優先度等が含まれる情報である。各メッセージ処理装置１０は、処理調整情報１０００の優先度等を参照することで、自身がメッセージを処理するか否かを判定することができる。
【００５６】
なお、図４では、トピックＩＤ毎のレコードが含まれる処理調整情報１０００を示したが、これに限られず、例えば、メッセージを識別する識別情報をメッセージＩＤとして、処理調整情報１０００は、トピックＩＤ及びメッセージＩＤ毎のレコードが含まれていても良い。これにより、同一トピックに属する異なるメッセージに対して異なる優先度を設定することができるようになる。
【００５７】
次に、処理管理情報２０００について、図５を参照しながら説明する。図５は、処理管理情報２０００の一例を示す図（実施例１）である。
【００５８】
図５に示すように、処理管理情報２０００は、１以上のレコードで構成される。また、各レコードには、トピックＩＤと、メッセージＩＤと、装置ＩＤと、実行状態とが含まれる。
【００５９】
トピックＩＤは、トピックを識別する識別情報である。メッセージＩＤは、当該トピックのメッセージを識別する識別情報である。処理管理情報２０００を構成する各レコードは、トピックＩＤとメッセージＩＤとの組（又は、メッセージＩＤが全トピックで一意である場合には、メッセージＩＤ）によって特定される。
【００６０】
装置ＩＤは、当該メッセージ処理を実行しているメッセージ処理装置１０の装置ＩＤである。実行状態は、当該メッセージ処理の実行状態（例えば、メッセージ処理が実行中であることを示す「実行中」、メッセージ処理が完了したことを示す「完了」等）である。
【００６１】
例えば、図５に示す例では、トピックＩＤ「Ｔ００１」及びメッセージＩＤ「Ｍ００１」のレコードには、装置ＩＤ「Ｄ００１」と、実行状態「実行中」とが含まれる。これは、トピックＩＤ「Ｔ００１」及びメッセージＩＤ「Ｍ００１」で特定されるメッセージ処理は、装置ＩＤ「Ｄ００１」のメッセージ処理装置１０で実行され、その実行状態は「実行中」であることを示している。
【００６２】
また、例えば、図５に示す例では、トピックＩＤ「Ｔ００２」及びメッセージＩＤ「Ｍ０１０」のレコードには、装置ＩＤ「Ｄ００５」と、実行状態「完了」とが含まれる。これは、トピックＩＤ「Ｔ００２」及びメッセージＩＤ「Ｍ０１０」で特定されるメッセージ処理は、装置ＩＤ「Ｄ００５」のメッセージ処理装置１０で実行され、その実行状態は「完了」であることを示している。
【００６３】
このように、処理管理情報２０００は、トピックＩＤ及びメッセージＩＤ毎（又はメッセージＩＤ毎）に、メッセージ処理を行っているメッセージ処理装置１０の装置ＩＤと、当該メッセージ処理の実行状態とが含まれる情報である。各メッセージ処理装置１０は、処理管理情報２０００の実行状態等を参照することで、他のメッセージ処理装置１０が実行している処理が完了したか否かを判定することができる。
【００６４】
＜メッセージ処理装置が実行する処理（メッセージ処理の実行制御処理）＞
次に、実施例１におけるメッセージ処理装置１０が実行する処理（メッセージ処理の実行制御処理）について、図６を参照しながら説明する。図６は、第一の実施形態に係るメッセージ処理装置が実行する処理（メッセージ処理の実行制御処理）の一例を示すフローチャート（実施例１）である。
【００６５】
まず、メッセージ処理装置１０のメッセージ送受信部１１０は、購読登録メッセージをメッセージブローカー装置２０に送信する（ステップＳ１０１）。購読登録メッセージには、購読対象のトピックと、このトピックを購読するメッセージ処理装置１０の装置ＩＤとが指定される。これにより、メッセージブローカー装置２０には、メッセージ処理装置１０の装置ＩＤと、このメッセージ処理装置１０が購読するトピックのトピックＩＤとが対応付けて登録される。
【００６６】
なお、メッセージ送受信部１１０は、例えば、メッセージ処理装置１０が電源投入により起動された場合やメッセージ送受信を行うためのアプリケーションが起動された場合、トピックの購読登録がユーザにより指示された場合等に、購読登録メッセージをメッセージブローカー装置２０に送信する。また、購読登録メッセージに指定されるトピック（購読対象トピック）は、予め設定されていても良いし、ユーザにより指定されても良い。
【００６７】
次に、メッセージ処理装置１０の実行制御部１２０は、共有情報管理装置４０の記憶部４１０に記憶されている処理調整情報１０００を更新する（ステップＳ１０２）。例えば、購読対象トピックを示すトピックＩＤのレコードに、当該メッセージ処理装置１０の装置ＩＤが含まれる場合、実行制御部１２０は、この装置ＩＤに対応付けられている稼働状態を「稼働」に変更する。一方で、例えば、購読対象トピックを示すトピックＩＤのレコードに、当該メッセージ処理装置１０の装置ＩＤが含まれない場合、実行制御部１２０は、当該レコードに対して、この装置ＩＤと、優先度と、稼働状態「稼働」とを追加する。なお、優先度としては、任意の優先度を追加すれば良い。例えば、ランダムに決定された優先度が追加されても良いし、最も低い優先度を追加されても良いし、最も高い優先度が追加されても良いし、ユーザにより指定された優先度が追加されても良い。
【００６８】
以上のステップＳ１０１〜ステップＳ１０２の処理が実行されることで、購読を登録したトピックのメッセージがメッセージブローカー装置２０からメッセージ処理装置１０に配信されるようになる。なお、例えば、購読対象のトピックを追加したい場合にも、メッセージ処理装置１０は、上記のステップＳ１０１〜ステップＳ１０２の処理を実行することで、購読対象のトピックを追加することができる。また、例えば、メッセージ処理装置１０は、上記のステップＳ１０１の処理の代わりに購読解除の処理を行った後、ステップＳ１０２の処理を実行することで、購読対象のトピックを削除することができる。更に、例えば、メッセージ処理装置１０は、購読解除の処理を行った後に、上記のステップＳ１０１〜ステップＳ１０２の処理を実行することで、購読対象のトピックを変更することができる。
【００６９】
メッセージ処理装置１０のメッセージ送受信部１１０は、メッセージブローカー装置２０からメッセージを受信するまで待機する（ステップＳ１０３でＮＯ）。そして、メッセージブローカー装置２０からのメッセージをメッセージ送受信部１１０が受信した場合（ステップＳ１０３でＹＥＳ）、メッセージ処理装置１０の実行制御部１２０は、共有情報管理装置４０の記憶部４１０に記憶されている処理調整情報１０００を参照して、当該メッセージを処理するか否かを判定する（ステップＳ１０４）。
【００７０】
ここで、実行制御部１２０は、例えば、処理調整情報１０００に含まれるレコードのうち、当該メッセージのトピックに対応するレコードを特定する。そして、実行制御部１２０は、このレコードにおいて、自身の装置ＩＤに対応付けられている優先度が最も高い場合、当該メッセージを処理すると判定する。一方で、実行制御部１２０は、自身の装置ＩＤに対応付けられている優先度が最も高いとはいえない場合、当該メッセージを処理しないと判定する。
【００７１】
当該メッセージを処理すると判定された場合（ステップＳ１０４でＹＥＳ）、メッセージ処理装置１０の実行制御部１２０は、共有情報管理装置４０の記憶部４１０に記憶されている処理管理情報２０００を更新する（ステップＳ１０５）。例えば、実行制御部１２０は、当該メッセージのトピックを示すトピックＩＤと、当該メッセージを示すメッセージＩＤと、自身の装置ＩＤと、実行状態「実行中」とが含まれるレコードを処理管理情報２０００に追加する。これにより、当該メッセージ処理装置１０で当該メッセージに対する処理が実行されていることが管理される。
【００７２】
なお、当該トピックＩＤと当該メッセージＩＤとが含まれるレコードが処理管理情報２０００に既に存在する場合、実行制御部１２０は、当該レコードの装置ＩＤを、自身の装置ＩＤに更新する。これは、他のメッセージ処理装置１０によりメッセージ処理の実行が開始されたものの、障害等により完了前に実行されなくなったメッセージ処理と同一のメッセージ処理を実行する場合に該当する。
【００７３】
次に、メッセージ処理装置１０のメッセージ処理部１３０は、メッセージ送受信部１１０が受信したメッセージに対する処理（メッセージ処理）を行う（ステップＳ１０６）。
【００７４】
上記のステップＳ１０６のメッセージ処理が完了した場合、メッセージ処理装置１０の実行制御部１２０は、共有情報管理装置４０の記憶部４１０に記憶されている処理管理情報２０００を更新する（ステップＳ１０７）。例えば、実行制御部１２０は、上記のステップＳ１０５で処理管理情報２０００に追加したレコードの実行状態を「完了」に更新する。これにより、当該メッセージ処理が完了したことが管理される。
【００７５】
そして、メッセージ処理装置１０は、上記のステップＳ１０３に戻る。すなわち、メッセージ処理装置１０は、メッセージブローカー装置２０からメッセージを受信するまで待機する。
【００７６】
一方で、上記のステップＳ１０４で当該メッセージを処理しないと判定された場合（ステップＳ１０４でＮＯ）、当該メッセージは、他のメッセージ処理装置１０によって処理される。すなわち、当該他のメッセージ処理装置１０が上記のステップＳ１０５〜ステップＳ１０７を実行することになる。
【００７７】
そこで、この場合、メッセージ処理装置１０の実行制御部１２０は、共有情報管理装置４０の記憶部４１０に記憶されている処理管理情報２０００を参照して、該当のメッセージ処理（すなわち、当該他のメッセージ処理装置１０が実行しているメッセージ処理）が完了したか否かを判定する（ステップＳ１０８）。このとき、実行制御部１２０は、例えば、メッセージ送受信部１１０が受信したメッセージのトピックを示すトピックＩＤと、当該メッセージを示すメッセージＩＤとが含まれるレコードの実行状態を参照し、この実行状態が「完了」であるか否かを判定すれば良い。
【００７８】
そして、該当のメッセージ処理が完了したと判定した場合（ステップＳ１０８でＹＥＳ）、メッセージ処理装置１０は、上記のステップＳ１０３に戻る。一方で、該当のメッセージ処理が完了したと判定されなかった場合（ステップＳ１０８でＮＯ）、メッセージ処理装置１０の実行制御部１２０は、メッセージ送受信部１１０がメッセージを受信してから所定の時間が経過したか否かを判定する（ステップＳ１０９）。これは、所定の時間が経過した場合、他のメッセージ処理装置１０に障害等が発生し、メッセージ処理が完了しなかった（メッセージ処理が失敗した）可能性が高いためである。なお、このような所定の時間の時間幅は、メッセージ処理の対象となるメッセージの長さによって異ならせることが好ましい。このため、メッセージの長さに応じて、当該時間幅が決定されても良い。
【００７９】
所定の時間が経過していないと判定された場合（ステップＳ１０９でＮＯ）、メッセージ処理装置１０は、上記のステップＳ１０８に戻る。すなわち、メッセージ処理装置１０は、当該メッセージ処理の実行状態が「完了」となるか又は所定の時間が経過するまで、処理管理情報２０００を繰り返し参照する。
【００８０】
一方で、所定の時間が経過したと判定された場合（ステップＳ１０９でＹＥＳ）、メッセージ処理装置１０の実行制御部１２０は、共有情報管理装置４０の記憶部４１０に記憶されている処理調整情報１０００を更新する（ステップＳ１１０）。例えば、実行制御部１２０は、処理調整情報１０００に含まれるレコードのうち、当該メッセージのトピックを示すトピックＩＤが含まれるレコードを特定し、特定したレコードに含まれる装置ＩＤのうち、当該他のメッセージ処理装置１０の装置ＩＤに対応付けられている稼働状態を「停止」に更新すると共に、優先度を最も低くする。このように、実行制御部１２０は、メッセージ処理を行った他のメッセージ処理装置１０で障害等が発生した場合、当該他のメッセージ処理装置１０の稼働状態を「停止」に変更すると共に、当該他のメッセージ処理装置１０の優先度を最も低くする（これに合せて、優先度を最も低くしたメッセージ処理装置１０以外のメッセージ処理装置１０の優先度を高くする。）。これにより、当該他のメッセージ処理装置１０では、メッセージ処理が行われなくなる。また、当該他のメッセージ処理装置１０の優先度を最も低くすることで、例えば、障害等から一時的に復旧したとしても、メッセージ処理が実行される事態を防止することができる。
【００８１】
そして、メッセージ処理装置１０は、上記のステップＳ１０４に戻る。すなわち、メッセージ処理装置１０の実行制御部１２０は、更新後の処理調整情報１０００を参照して、当該メッセージを処理するか否かを判定する。これにより、例えば、稼働状態が「稼働」であるメッセージ処理装置１０であって、最も優先度が高いメッセージ処理装置１０により当該メッセージが処理される。
【００８２】
このように、或るメッセージ処理装置１０−１でのメッセージ処理が障害等により失敗した場合、この或るメッセージ処理装置１０−１とは異なるメッセージ処理装置１０（例えば、メッセージ処理装置１０−２）で同一のメッセージに対するメッセージ処理が実行される。ここで、メッセージ処理装置１０−２は、メッセージ処理装置１０−１で処理されていたメッセージを最初から処理しても良いが、メッセージ処理の内容によっては、メッセージ処理装置１０−１で実行されたメッセージ処理を途中から引き継いでも良い。例えば、図７に示すように、メッセージ処理装置１０−１がメッセージを６０％まで処理したところで障害等により停止したものとする。この場合、メッセージ処理装置１０−２は、このメッセージの６０％以降の残りのメッセージに対する処理を実行しても良い。このような引き継ぎを行えるメッセージ処理としては、例えば、メッセージに含まれる各データをＤＢサーバに格納する処理やメッセージに含まれる各データをそれぞれ加工する処理等が挙げられる。
【００８３】
なお、上記のステップＳ１１０は、同一トピックを購読している複数のメッセージ処理装置１０のうち、メッセージ処理を実行し障害等が発生した他のメッセージ処理装置１０以外の複数のメッセージ処理装置１０によって実行される場合がある。このため、上記のステップＳ１１０は、例えば、当該他のメッセージ処理装置１０以外の複数のメッセージ処理装置１０のうち、最も優先度が高いメッセージ処理装置１０のみが実行したり、最初にステップＳ１１０の処理を実行したメッセージ処理装置１０のみが実行したりする等、１台のメッセージ処理装置１０のみが実行することが好ましい。
【００８４】
なお、上記のステップＳ１０３〜ステップＳ１１１の処理は、マルチスレッド等によって１つのメッセージ処理装置１０内で並列に実行されても良い。例えば、２つのスレッドを用いる場合、第１のスレッドによるステップＳ１０３〜ステップＳ１１１の処理と、第２のスレッドによるステップＳ１０３〜ステップＳ１１１の処理とが１つのメッセージ処理装置１０内で並列に実行されても良い。
【００８５】
以上のように、本実施形態に係るメッセージ処理システム１では、同一トピックを購読しているメッセージ処理装置１０のうち、稼働状態が「稼働」であり、かつ、優先度が最も高いメッセージ処理装置１０が当該トピックのメッセージを処理する。また、本実施形態に係るメッセージ処理システム１では、メッセージを処理しているメッセージ処理装置１０に障害等が発生し、メッセージ処理が完了しない場合には、このメッセージ処理装置１０の稼働状態を「停止」に更新する。
【００８６】
これにより、本実施形態に係るメッセージ処理システム１は、メッセージ処理の不整合や漏れ等を防止しつつ、複数のメッセージ処理装置１０間でメッセージ処理を分散することができる。
【００８７】
（実施例２）
以降では、本実施形態に係るメッセージ処理システム１の実施例２について説明する。実施例１では、或る１時点の時刻を考えた場合に、１つのメッセージを処理するメッセージ処理装置１０は１台であった。しかしながら、メッセージ処理の内容によっては、１つのメッセージを複数のメッセージ処理装置１０で並列に処理することができる場合がある。
【００８８】
そこで、実施例２では、１つのメッセージを複数のメッセージ処理装置１０で処理する場合について説明する。これにより、例えば、大量のデータが含まれるようなメッセージに対する処理を複数のメッセージ処理装置１０で並列に処理することができ、効率的なメッセージ処理を行うことができるようになる。このような並列処理が可能なメッセージとしては、例えば、メッセージに含まれる各データをＤＢサーバに格納する処理やメッセージに含まれる各データをそれぞれ加工する処理等が挙げられる。
【００８９】
なお、実施例２では、主に、実施例１との相違点について説明し、実施例１と同様の構成要素については、適宜、その説明を省略する。
【００９０】
＜機能構成＞
まず、実施例２におけるメッセージ処理システム１の機能構成について、図８を参照しながら説明する。図８は、第一の実施形態に係るメッセージ処理システム１の機能構成の一例を示す図（実施例２）である。
【００９１】
図８に示すように、実施例２における共有情報管理装置４０の記憶部４１０には、更に、処理割当情報３０００が記憶されている。
【００９２】
ここで、処理割当情報３０００の詳細について、図９を参照しながら説明する。図９は、処理割当情報３０００の一例を示す図（実施例２）である。
【００９３】
図９に示すように、処理割当情報３０００は、１以上のレコードで構成される。また、各レコードには、トピックＩＤと、メッセージＩＤと、分割メッセージＩＤと、優先度と、割当範囲とが含まれる。
【００９４】
トピックＩＤは、トピックを識別する識別情報である。メッセージＩＤは、当該トピックのメッセージを識別する識別情報である。処理割当情報３０００を構成する各レコードは、トピックＩＤとメッセージＩＤとの組（又は、メッセージＩＤが全トピックで一意である場合には、メッセージＩＤ）によって特定される。
【００９５】
分割メッセージＩＤは、後述する割当範囲を識別する識別情報である。優先度は、後述する割当範囲が割り当てられる優先度である。割当範囲は、メッセージに含まれるデータのうち、当該優先度のメッセージ処理装置１０に割り当てられるデータの範囲である。割当範囲は、例えば、データの位置等で指定される。具体的には、例えば、メッセージに含まれるデータが全部で３００バイト存在する場合、優先度「１」は先頭０バイト目〜９９バイト目、優先度「２」は先頭１００バイト目〜１９９バイト目、優先度「３」は先頭２００バイト目〜２９９バイト目等である。これにより、１つのメッセージを、優先度「１」〜優先度「３」の３つのメッセージ処理装置１０で並列処理することができるようになる。
【００９６】
このように、処理割当情報３０００は、トピックＩＤ及びメッセージＩＤ毎（又はメッセージＩＤ毎）に、１つのメッセージが並列処理されるための割当範囲が含まれる情報である。各メッセージ処理装置１０は、処理割当情報３０００の優先度及び割当範囲を参照することで、自身が当該割当範囲のメッセージ処理を実行するか否かを判定することができる。なお、上述したように、実施例２では、各メッセージ処理装置１０は、自身の優先度に対応する割当範囲のメッセージ処理を実行する。このため、実施例２でも「優先度」との名称を用いているが、実施例２では、メッセージ処理の優先順とは関係がない。したがって、実施例２では、「優先度」の代わりに、例えば、「割当番号」等の名称が用いられても良い。また、この割当番号としては、装置ＩＤが用いられても良い。
【００９７】
また、実施例２では、処理管理情報２０００が異なる。そこで、実施例２における処理管理情報２０００について、図１０を参照しながら説明する。図１０は、処理管理情報２０００の一例を示す図（実施例２）である。
【００９８】
図１０に示すように、実施例２における処理管理情報２０００を構成する各レコードには、更に、分割メッセージＩＤが含まれる。分割メッセージＩＤは、上述した通りである。
【００９９】
このように、実施例２における処理管理情報２０００は、分割メッセージＩＤと装置ＩＤと実行状態とが対応付けられることで、割当範囲に対するメッセージ処理の実行状態を管理することができる。各メッセージ処理装置１０は、処理管理情報２０００の分割メッセージＩＤ及び実行状態等を参照することで、当該分割メッセージＩＤにより識別される割当範囲に対するメッセージ処理が完了したか否かを判定することができる。
【０１００】
＜メッセージ処理装置が実行する処理（メッセージ処理の実行制御処理）＞
次に、実施例２におけるメッセージ処理装置１０が実行する処理（メッセージ処理の実行制御処理）について、図１１を参照しながら説明する。図１１は、第一の実施形態に係るメッセージ処理装置が実行する処理（メッセージ処理の実行制御処理）の一例を示すフローチャート（実施例２）である。なお、図１１のステップＳ２０１〜ステップＳ２０３は、図６のステップＳ１０１〜ステップＳ１０３と同様であるため、その説明を省略する。以降の図１１の説明では、１つのメッセージのメッセージＩＤに対応する分割メッセージＩＤの数に対して、当該メッセージのトピックを購読しているメッセージ処理装置１０の数は十分多い（例えば、分割メッセージＩＤの数が数個〜十数個であるのに対して、当該メッセージのトピックを購読しているメッセージ処理装置１０の数は少なくとも十数台である）ものとして説明する。
【０１０１】
メッセージブローカー装置２０からのメッセージをメッセージ送受信部１１０が受信した場合（ステップＳ２０３でＹＥＳ）、メッセージ処理装置１０の実行制御部１２０は、共有情報管理装置４０の記憶部４１０に記憶されている処理調整情報１０００及び処理割当情報３０００を参照して、当該メッセージを処理するか否かを判定する（ステップＳ２０４）。
【０１０２】
ここで、実行制御部１２０は、例えば、処理調整情報１０００に含まれるレコードうち、当該メッセージのトピックに対応するレコードを特定した上で、更に、このレコードにおいて、自身の装置ＩＤに対応付けられている優先度を特定する。そして、実行制御部１２０は、処理割当情報３０００に含まれるレコードうち、当該トピック及び当該メッセージ対応するレコードに、特定した優先度が含まれる場合、当該メッセージを処理すると判定する。一方で、実行制御部１２０は、当該レコードに、特定した優先度が含まれない場合、当該メッセージを処理しないと判定する。
【０１０３】
当該メッセージを処理すると判定された場合（ステップＳ２０４でＹＥＳ）、メッセージ処理装置１０の実行制御部１２０は、共有情報管理装置４０の記憶部４１０に記憶されている処理管理情報２０００を更新する（ステップＳ２０５）。例えば、実行制御部１２０は、当該メッセージのトピックを示すトピックＩＤと、当該メッセージを示すメッセージＩＤと、上記のステップＳ２０４で特定した優先度に対応する分割メッセージＩＤと、自身の装置ＩＤと、実行状態「実行中」とが含まれるレコードを処理管理情報２０００に追加する。これにより、当該メッセージ処理装置１０で当該メッセージの割当範囲に対する処理が実行されていることが管理される。
【０１０４】
なお、当該トピックＩＤと当該メッセージＩＤと当該分割メッセージＩＤとが含まれるレコードが処理管理情報２０００に既に存在する場合、実行制御部１２０は、当該レコードの装置ＩＤを、自身の装置ＩＤに更新する。これは、他のメッセージ処理装置１０により当該割当範囲に対するメッセージ処理の実行が開始されたものの、障害等により完了前に実行されなくなったメッセージ処理と同一のメッセージ処理を実行する場合に該当する。
【０１０５】
次に、メッセージ処理装置１０のメッセージ処理部１３０は、メッセージ送受信部１１０が受信したメッセージの割当範囲に対する処理（メッセージ処理）を行う（ステップＳ２０６）。
【０１０６】
上記のステップＳ２０６のメッセージ処理が完了した場合、メッセージ処理装置１０の実行制御部１２０は、共有情報管理装置４０の記憶部４１０に記憶されている処理管理情報２０００を更新する（ステップＳ２０７）。例えば、実行制御部１２０は、上記のステップＳ２０５で処理管理情報２０００に追加したレコードの実行状態を「完了」に更新する。これにより、当該割当範囲に対するメッセージ処理が完了したことが管理される。そして、メッセージ処理装置１０は、上記のステップＳ２０８に進む。
【０１０７】
一方で、上記のステップＳ２０４で当該メッセージを処理しないと判定された場合（ステップＳ２０４でＮＯ）又はステップＳ２０７に続いて、メッセージ処理装置１０の実行制御部１２０は、共有情報管理装置４０の記憶部４１０に記憶されている処理管理情報２０００を参照して、他のメッセージ処理装置１０に割り当てられた割当範囲に対するメッセージ処理が全て完了したか否かを判定する（ステップＳ２０８）。このとき、実行制御部１２０は、例えば、メッセージ送受信部１１０が受信したメッセージのトピックを示すトピックＩＤと、当該メッセージを示すメッセージＩＤとが含まれる全てのレコードの実行状態を参照し、これらの全てのレコードの実行状態が「完了」であるか否かを判定すれば良い。
【０１０８】
そして、他のメッセージ処理装置１０に割り当てられた割当範囲に対するメッセージ処理が全て完了したと判定した場合（ステップＳ２０８でＹＥＳ）、メッセージ処理装置１０は、ステップＳ２０３に戻る。一方で、他のメッセージ処理装置１０に割り当てられた割当範囲に対するメッセージ処理が全て完了したと判定されなかった場合（ステップＳ２０８でＮＯ）、メッセージ処理装置１０の実行制御部１２０は、メッセージ送受信部１１０がメッセージを受信してから所定の時間が経過したか否かを判定する（ステップＳ２０９）。
【０１０９】
所定の時間が経過していないと判定された場合（ステップＳ２０９でＮＯ）、メッセージ処理装置１０は、上記のステップＳ２０８に戻る。すなわち、メッセージ処理装置１０は、他のメッセージ処理装置１０に割り当てられた割当範囲に対するメッセージ処理の全ての実行状態が「完了」となるか又は所定の時間が経過するまで、処理管理情報２０００を繰り返し参照する。
【０１１０】
一方で、所定の時間が経過したと判定された場合（ステップＳ２０９でＹＥＳ）、メッセージ処理装置１０の実行制御部１２０は、共有情報管理装置４０の記憶部４１０に記憶されている処理調整情報１０００及び処理割当情報３０００を更新する（ステップＳ２１０）。例えば、実行制御部１２０は、処理調整情報１０００に含まれるレコードのうち、当該メッセージのトピックを示すトピックＩＤが含まれるレコードを特定し、特定したレコードに含まれる装置ＩＤのうち、当該他のメッセージ処理装置１０の装置ＩＤに対応付けられている稼働状態を「停止」に更新すると共に、優先度を、当該メッセージの割当範囲に対応付けられている優先度以外の優先度に変更する。また、実行制御部１２０は、自身の装置ＩＤが対応付けられている優先度を、当該メッセージの割当範囲に対応付けられている優先度のうち、実行状態が「実行中」である分割メッセージＩＤの割当範囲に対応付けられている優先度に変更する。
【０１１１】
そして、メッセージ処理装置１０は、上記のステップＳ２０４に戻る。すなわち、メッセージ処理装置１０の実行制御部１２０は、更新後の処理調整情報１０００と、処理割当情報３０００とを参照して、当該メッセージを処理するか否かを判定する。これにより、例えば、稼働状態が「稼働」であるメッセージ処理装置１０であって、変更後の優先度に対応するメッセージ処理装置により、当該メッセージにおける処理が完了していない割当範囲が処理される。
【０１１２】
以上のように、本実施形態に係るメッセージ処理システム１では、１つのメッセージを複数のメッセージ処理装置１０で並列して処理することができる。これにより、例えば、１つのメッセージに大量のデータが含まれている場合（すなわち、メッセージの長さが長い場合）等に、複数のメッセージ処理装置１０で並列して処理し、効率的なメッセージ処理を行うことができるようになる。
【０１１３】
［第二の実施形態］
次に、第二の実施形態について説明する。第一の実施形態に係るメッセージ処理システム１では、例えば、同一のトピックを購読しているサブスクライバー（メッセージ処理装置１０）が高負荷状態となっていたり、異常の発生により停止状態となっていたりした場合等には、このトピック宛のメッセージ処理が遅れたり、停止したりしてしまうことがあった。また、これとは逆に、例えば、同一のトピックを購読しているサブスクライバーが全体的に低負荷状態である場合等には、優先度の低いメッセージ処理装置１０はメッセージ処理を行うことなく起動したままの状態となり、物理サーバの消費電力に無駄が生じることがあった。更に、この場合、外部のクラウドサービス等によってメッセージ処理装置１０を実現しているときには、例えばクラウドサービスの利用時間に応じた費用等に無駄が生じることがあった。
【０１１４】
そこで、第二の実施形態では、同一のトピックを購読しているサブスクライバーが高負荷状態となったり、停止状態となったりした場合には当該トピックを購読するサブスクライバーを追加する一方で、同一のトピックを購読しているサブスクライバーが全体的に低負荷状態である場合等には当該トピックを購読するサブスクライバーを削減するメッセージ処理システム１について説明する。
【０１１５】
なお、第二の実施形態では、主に、第一の実施形態との相違点について説明し、第一の実施形態と同様の構成要素については、適宜、その説明を省略する。
【０１１６】
＜全体構成＞
まず、本実施形態に係るメッセージ処理システム１の全体構成について、図１２を参照しながら説明する。図１２は、第二の実施形態に係るメッセージ処理システム１の全体構成の一例を示す図である。
【０１１７】
図１２に示すように、本実施形態に係るメッセージ処理システム１には、更に、購読制御装置５０が含まれる。購読制御装置５０は、例えば、ネットワークや仮想的なネットワーク、プロセス間通信、内部配線等により、メッセージブローカー装置２０及び共有情報管理装置４０と通信可能に接続される。
【０１１８】
購読制御装置５０は、同一のトピックを購読しているメッセージ処理装置１０の負荷状態や停止状態（異常発生による停止状態）に応じて、当該トピックを購読するメッセージ処理装置１０を追加又は削減するための制御を行う。なお、購読制御装置５０のハードウェア構成は、例えば、図２に示すコンピュータ６００のハードウェア構成により実現される。
【０１１９】
＜機能構成＞
次に、本実施形態に係るメッセージ処理システム１の機能構成について、図１３を参照しながら説明する。図１３は、第二の実施形態に係るメッセージ処理システム１の機能構成の一例を示す図である。
【０１２０】
図１３に示すように、本実施形態に係る購読制御装置５０は、メッセージ送受信部５１０と、リソース監視部５２０とを有する。これら各部は、購読制御装置５０にインストールされた１以上のプログラムＣＰＵに実行させる処理により実現される。
【０１２１】
メッセージ送受信部５１０は、メッセージ処理装置１０に異常が発生したことを示す異常通知メッセージを購読するための購読登録メッセージをメッセージブローカー装置２０に送信する。
【０１２２】
また、メッセージ送受信部５１０は、異常通知メッセージをメッセージブローカー装置２０から受信した場合や高負荷状態を検知した場合等に、例えば起動されていないメッセージ処理装置１０に対して、当該メッセージ処理装置１０を起動させるためのメッセージ（起動依頼メッセージ）と、トピックの購読登録を依頼するメッセージ（購読登録依頼メッセージ）とを送信する。一方で、メッセージ送受信部５１０は、同一のトピックを購読しているメッセージ処理装置１０で低負荷状態を検知した場合等に、例えば優先度の最も低いメッセージ処理装置１０のトピックの購読解除を依頼するメッセージ（購読解除メッセージ）と、当該メッセージ処理装置１０の稼働を停止させるためのメッセージ（稼働停止メッセージ）とを送信する。
【０１２３】
リソース監視部５２０は、共有情報管理装置４０の記憶部４１０に記憶されているリソース情報４０００を参照して、同一のトピックを購読しているメッセージ処理装置１０のリソース使用量を監視する。ここで、リソース情報４０００には、例えば、トピック毎に、当該トピックを購読しているメッセージ処理装置１０のリソース使用量が格納されている。リソース使用量としては、例えば、ＣＰＵ使用量（又はＣＰＵ使用率）やネットワーク使用量等が挙げられる。
【０１２４】
そして、リソース監視部５２０は、例えば、同一のトピックを購読しているメッセージ処理装置１０のリソース使用量の合計が、予め設定された第１の閾値を超えた場合に、高負荷状態を検知する。一方で、リソース監視部５２０は、例えば、同一のトピックを購読しているメッセージ処理装置１０のリソース使用量の合計が、予め設定された第２の閾値を下回った場合に、低負荷状態を検知する。又は、リソース監視部５２０は、例えば、同一のトピックを購読しているメッセージ処理装置１０のうち、最も優先度が低いメッセージ処理装置１０のリソース使用量が第３の閾値以下である場合に、低負荷状態を検知しても良い。
【０１２５】
また、本実施形態に係るメッセージ処理装置１０のメッセージ送受信部１１０は、更に、異常通知依頼メッセージをメッセージブローカー装置２０に送信する。ここで、異常通知依頼メッセージとは、メッセージ処理装置１０に異常が発生した場合に、メッセージブローカー装置２０が異常通知を送信することを依頼するためのメッセージである。この異常通知依頼メッセージは、例えば、ＭＱＴＴのｗｉｌｌ機能を用いて実現することができる。
【０１２６】
更に、本実施形態に係るメッセージ処理装置１０の実行制御部１２０は、例えば、所定の時間毎に、ＣＰＵ使用量やネットワーク使用量等のリソース使用量を用いて、リソース情報４０００を更新する。これにより、本実施形態に係る共有情報管理装置４０の記憶部４１０に記憶されているリソース情報４０００が所定の時間毎に更新される。ただし、例えば、共有情報管理装置４０が、所定の時間毎に、各メッセージ処理装置１０からリソース使用量を収集（取得）しても良い。
【０１２７】
＜全体処理（通常時）＞
次に、本実施形態に係るメッセージ処理システム１の全体処理（通常時）について、図１４を参照しながら説明する。図１４は、第二の実施形態に係るメッセージ処理システム１の全体処理の一例を示すシーケンス図（通常時）である。なお、通常時とは、メッセージ処理装置１０に何等の異常も発生しておらず、かつ、高負荷状態及び低負荷状態のいずれでもない場合である。以降では、一例として、同一のトピックを購読するメッセージ処理装置１０−１及びメッセージ処理装置１０−２に対して、メッセージ送信装置３０からのメッセージが送信される場合について説明する。
【０１２８】
メッセージ処理装置１０−１が電源の投入やプログラムの実行等により起動されると、当該メッセージ処理装置１０−１のメッセージ送受信部１１０は、購読登録メッセージと、異常通知依頼メッセージとをメッセージブローカー装置２０に送信する（ステップＳ３０１）。購読登録メッセージには、購読対象のトピックと、自身を識別する識別情報（例えば、装置ＩＤ等）とが指定される。また、異常通知依頼メッセージには、例えば、自身を識別する識別情報（例えば、装置ＩＤ等）が含まれる。これにより、当該メッセージ処理装置１０−１がトピックを購読することと、異常が発生した場合に異常通知メッセージを送信することとがメッセージブローカー装置２０に登録される。
【０１２９】
次に、メッセージ処理装置１０−１の実行制御部１２０は、図６のステップＳ１０２と同様に、共有情報管理装置４０の記憶部４１０に記憶されている処理調整情報１０００を更新する（ステップＳ３０２）。すなわち、実行制御部１２０は、例えば、購読対象トピックを示すトピックＩＤのレコードに、当該メッセージ処理装置１０−１の装置ＩＤが含まれる場合、実行制御部１２０は、この装置ＩＤに対応付けられている稼働状態を「稼働」に変更する。一方で、例えば、購読対象トピックを示すトピックＩＤのレコードに、当該メッセージ処理装置１０−１の装置ＩＤが含まれない場合、実行制御部１２０は、当該レコードに対して、この装置ＩＤと、優先度と、稼働状態「稼働」とを追加する。
【０１３０】
同様に、メッセージ処理装置１０−２が電源の投入やプログラムの実行等により起動されると、当該メッセージ処理装置１０−２のメッセージ送受信部１１０は、購読登録メッセージと、異常通知依頼メッセージとをメッセージブローカー装置２０に送信する（ステップＳ３０３）。購読登録メッセージには、購読対象のトピックと、自身を識別する識別情報（例えば、装置ＩＤ等）とが指定される。また、異常通知依頼メッセージには、例えば、自身を識別する識別情報（例えば、装置ＩＤ等）が含まれる。なお、購読対象のトピックを示すトピックＩＤは、上記のステップＳ３０１でメッセージ処理装置１０−１が指定したトピックＩＤと同一であるものとする。
【０１３１】
次に、メッセージ処理装置１０−１の実行制御部１２０は、図６のステップＳ１０２と同様に、共有情報管理装置４０の記憶部４１０に記憶されている処理調整情報１０００を更新する（ステップＳ３０４）。
【０１３２】
購読制御装置５０が電源の投入やプログラムの実行等により起動されると、当該購読制御装置５０のメッセージ送受信部５１０は、異常通知メッセージを購読するための購読登録メッセージをメッセージブローカー装置２０に送信する（ステップＳ３０５）。これにより、メッセージ処理装置１０−１やメッセージ処理装置１０−２に異常が発生した場合に、購読制御装置５０には、メッセージブローカー装置２０から異常通知メッセージが送信される。
【０１３３】
以上のステップＳ３０１〜ステップＳ３０５が初期処理である。この初期処理は、例えば、メッセージ送信装置３０によるメッセージ送信の前に、事前に実行される。
【０１３４】
メッセージ送信装置３０は、メッセージ（メッセージ処理装置１０により処理される処理対象のメッセージ）をメッセージブローカー装置２０に送信する（ステップＳ３０６）。ここで、メッセージには、宛先として、トピックが指定される。なお、メッセージ処理装置１０−１及び１０−２は、当該トピックを購読しているものとする。
【０１３５】
メッセージブローカー装置２０は、メッセージ送信装置３０から受信したメッセージを、当該メッセージの宛先として指定されているトピックを購読しているメッセージ処理装置１０−１に送信する（ステップＳ３０７）。同様に、メッセージブローカー装置２０は、当該メッセージをメッセージ処理装置１０−２に送信する（ステップＳ３０８）。
【０１３６】
そして、メッセージ処理装置１０−１及び１０−２は、図６のメッセージ処理の実行制御処理のステップＳ１０３〜ステップＳ１１０を実行する（ステップＳ３０９）。これにより、メッセージ処理装置１０−１及び１０−２のいずれか一方（すなわち、優先度の高いメッセージ処理装置１０）により当該メッセージが処理される。なお、メッセージ処理装置１０−１及び１０−２は、図１１のメッセージ処理の実行制御処理のステップＳ２０３〜ステップＳ２１０を実行しても良い。
【０１３７】
＜全体処理（異常発生時）＞
次に、本実施形態に係るメッセージ処理システム１の全体処理（異常発生時）について、図１５を参照しながら説明する。図１５は、第二の実施形態に係るメッセージ処理システム１の全体処理の一例を示すシーケンス図（異常発生時）である。なお、図１５では、図１４と同様に、同一のトピックを購読するメッセージ処理装置１０−１及びメッセージ処理装置１０−２に対して、メッセージ送信装置３０からのメッセージが送信される場合について説明する。また、初期処理（図１４のステップＳ３０１〜ステップＳ３０５）は実行済みであるものとする。
【０１３８】
メッセージ送信装置３０は、メッセージ（メッセージ処理装置１０により処理される処理対象のメッセージ）をメッセージブローカー装置２０に送信する（ステップＳ４０１）。ここで、メッセージには、宛先として、トピックが指定される。なお、メッセージ処理装置１０−１及び１０−２は、当該トピックを購読しているものとする。
【０１３９】
メッセージブローカー装置２０は、メッセージ送信装置３０から受信したメッセージを、当該メッセージの宛先として指定されているトピックを購読しているメッセージ処理装置１０−１に送信する（ステップＳ４０２）。同様に、メッセージブローカー装置２０は、当該メッセージをメッセージ処理装置１０−２に送信する（ステップＳ４０３）。
【０１４０】
そして、メッセージ処理装置１０−１及び１０−２は、図６のメッセージ処理の実行制御処理のステップＳ１０３〜ステップＳ１１０を実行する（ステップＳ４０４）。ここで、一例として、メッセージ処理装置１０−１の方がメッセージ処理装置１０−２よりも優先度が高いものとして、メッセージ処理装置１０−１が当該メッセージの処理中に異常が発生し、停止状態となったものとする。この場合、当該メッセージは、メッセージ処理装置１０−２により処理される。
【０１４１】
メッセージブローカー装置２０は、メッセージ処理装置１０−１に異常が発生したことを検知すると、異常通知メッセージを購読制御装置５０に送信する（ステップＳ４０５）。異常通知メッセージには、例えば、メッセージ処理装置１０−１が購読しているトピックを示すトピックＩＤが指定される。なお、メッセージブローカー装置２０は、同一のトピックを購読しているメッセージ処理装置１０（すなわち、メッセージ処理装置１０−２）にも異常通知メッセージを送信しても良い。これにより、メッセージ処理装置１０−２は、メッセージ処理装置１０−１に異常が発生したことを素早く検知することができる。
【０１４２】
なお、メッセージブローカー装置２０は、例えば、所定の時間毎に、各メッセージ処理装置１０に対して死活確認を送信することで、異常が発生したメッセージ処理装置１０を検知することができる。
【０１４３】
購読制御装置５０のメッセージ送受信部５１０は、異常通知メッセージを受信すると、起動依頼メッセージと、購読登録依頼メッセージとをメッセージ処理装置１０−３に送信する（ステップＳ４０６）。購読登録依頼メッセージには、異常が発生したメッセージ処理装置１０−１が購読しているトピックを示すトピックＩＤが指定される。
【０１４４】
ここで、メッセージ処理装置１０−３は、例えば、稼働停止状態のサブスクライバーである（したがって、この場合、メッセージ処理装置１０−３は何等のトピックも購読していない。）。起動依頼メッセージによりメッセージ処理装置１０−３が起動される。なお、メッセージ処理装置１０−３が起動済である場合には、購読制御装置５０のメッセージ送受信部５１０は、起動依頼メッセージを送信しなくても良い。ただし、この場合、メッセージ処理装置１０−３は、購読登録依頼メッセージに指定されているトピックＩＤのトピックを購読していないものとする。
【０１４５】
なお、本実施形態では、購読制御装置５０は、異常通知メッセージを受信した場合に、上記のステップＳ４０６を実行するものとしたが、これに限られない。購読制御装置５０は、メッセージ処理装置１０の異常を任意の方法により検知した場合に、上記のステップＳ４０６を実行しても良い。このような方法としては、例えば、購読制御装置５０がメッセージ処理装置１０から応答があるか否かを監視しても良いし、エージェントがメッセージ処理装置１０の異常を検知して、このエージェントから購読制御装置５０が通知を受けても良い。
【０１４６】
メッセージ処理装置１０−３が起動されると、当該メッセージ処理装置１０−３のメッセージ送受信部１１０は、購読登録メッセージと、異常通知依頼メッセージとをメッセージブローカー装置２０に送信する（ステップＳ４０７）。購読登録メッセージには、購読対象のトピックとして、購読登録依頼メッセージに指定されているトピック（トピックＩＤ）が指定される。また、購読登録メッセージには、自身（メッセージ処理装置１０−３）を識別する識別情報も指定される。また、異常通知依頼メッセージには、例えば、自身を識別する識別情報（例えば、装置ＩＤ等）が含まれる。これにより、当該メッセージ処理装置１０−３が当該トピックを購読することと、異常が発生した場合に異常通知メッセージを送信することとがメッセージブローカー装置２０に登録される。
【０１４７】
次に、メッセージ処理装置１０−３の実行制御部１２０は、図６のステップＳ１０２と同様に、共有情報管理装置４０の記憶部４１０に記憶されている処理調整情報１０００を更新する（ステップＳ４０８）。すなわち、実行制御部１２０は、例えば、購読対象トピックを示すトピックＩＤのレコードに、当該メッセージ処理装置１０−３の装置ＩＤが含まれる場合、実行制御部１２０は、この装置ＩＤに対応付けられている稼働状態を「稼働」に変更する。一方で、例えば、購読対象トピックを示すトピックＩＤのレコードに、当該メッセージ処理装置１０−３の装置ＩＤが含まれない場合、実行制御部１２０は、当該レコードに対して、この装置ＩＤと、優先度と、稼働状態「稼働」とを追加する。
【０１４８】
このように、本実施形態に係るメッセージ処理システム１では、或るメッセージ処理装置１０に異常が発生し、停止状態となった場合、購読制御装置５０は、当該メッセージ処理装置１０が購読しているトピックと同一のトピックを他のメッセージ処理装置１０に購読させる。これにより、本実施形態に係るメッセージ処理システム１は、同一のトピックを購読しているメッセージ処理装置１０のうちの１以上のメッセージ処理装置１０が停止状態となった場合であっても、このトピックの宛のメッセージ処理が遅れたり、停止したりしてしまう事態を防止することができる。
【０１４９】
＜全体処理（高負荷時）＞
次に、本実施形態に係るメッセージ処理システム１の全体処理（高負荷時）について、図１６を参照しながら説明する。図１６は、第二の実施形態に係るメッセージ処理システム１の全体処理の一例を示すシーケンス図（高負荷時）である。
【０１５０】
購読制御装置５０のリソース監視部５２０は、共有情報管理装置４０の記憶部４１０に記憶されているリソース情報４０００を参照して、同一のトピックを購読しているメッセージ処理装置１０のリソース使用量を監視する（ステップＳ５０１）。
【０１５１】
以降では、上記のステップＳ５０１の監視の結果、或るトピックを購読しているメッセージ処理装置１０で高負荷状態が検知されたものとする。なお、高負荷状態が検知されなかった場合は、以降のステップＳ５０２〜ステップＳ５０４は実行されない。
【０１５２】
購読制御装置５０のメッセージ送受信部５１０は、起動依頼メッセージと、購読登録依頼メッセージとをメッセージ処理装置１０−４に送信する（ステップＳ５０２）。購読登録依頼メッセージには、当該トピックを示すトピックＩＤが指定される。
【０１５３】
ここで、メッセージ処理装置１０−４は、例えば、稼働停止状態のサブスクライバーである（したがって、この場合、メッセージ処理装置１０−３は何等のトピックも購読していない。）。起動依頼メッセージによりメッセージ処理装置１０−４が起動される。なお、メッセージ処理装置１０−４が起動済である場合には、購読制御装置５０のメッセージ送受信部５１０は、起動依頼メッセージを送信しなくても良い。ただし、この場合、メッセージ処理装置１０−４は、当該トピックを購読していないものとする。
【０１５４】
メッセージ処理装置１０−４が起動されると、当該メッセージ処理装置１０−４のメッセージ送受信部１１０は、購読登録メッセージと、異常通知依頼メッセージとをメッセージブローカー装置２０に送信する（ステップＳ５０３）。購読登録メッセージには、購読対象のトピックとして、当該トピック（トピックＩＤ）が指定される。また、購読登録メッセージには、自身（メッセージ処理装置１０−４）を識別する識別情報も指定される。また、異常通知依頼メッセージには、例えば、自身を識別する識別情報（例えば、装置ＩＤ等）が含まれる。これにより、当該メッセージ処理装置１０−４が当該トピックを購読することと、異常が発生した場合に異常通知メッセージを送信することとがメッセージブローカー装置２０に登録される。
【０１５５】
次に、メッセージ処理装置１０−４の実行制御部１２０は、図６のステップＳ１０２と同様に、共有情報管理装置４０の記憶部４１０に記憶されている処理調整情報１０００を更新する（ステップＳ５０４）。すなわち、実行制御部１２０は、例えば、購読対象トピックを示すトピックＩＤのレコードに、当該メッセージ処理装置１０−４の装置ＩＤが含まれる場合、実行制御部１２０は、この装置ＩＤに対応付けられている稼働状態を「稼働」に変更する。一方で、例えば、購読対象トピックを示すトピックＩＤのレコードに、当該メッセージ処理装置１０−４の装置ＩＤが含まれない場合、実行制御部１２０は、当該レコードに対して、この装置ＩＤと、優先度と、稼働状態「稼働」とを追加する。
【０１５６】
このように、本実施形態に係るメッセージ処理システム１では、同一のトピックを購読しているメッセージ処理装置１０が高負荷状態となった場合、購読制御装置５０は、当該メッセージ処理装置１０が購読しているトピックと同一のトピックを他のメッセージ処理装置１０に購読させる。これにより、本実施形態に係るメッセージ処理システム１は、同一のトピックを購読しているメッセージ処理装置１０が高負荷状態となった場合であっても、このトピックの宛のメッセージ処理が遅れてしまう事態を防止することができる。
【０１５７】
＜全体処理（低負荷時）＞
次に、本実施形態に係るメッセージ処理システム１の全体処理（低負荷時）について、図１７を参照しながら説明する。図１７は、第二の実施形態に係るメッセージ処理システム１の全体処理の一例を示すシーケンス図（低負荷時）である。
【０１５８】
購読制御装置５０のリソース監視部５２０は、共有情報管理装置４０の記憶部４１０に記憶されているリソース情報４０００を参照して、同一のトピックを購読しているメッセージ処理装置１０のリソース使用量を監視する（ステップＳ６０１）。
【０１５９】
以降では、上記のステップＳ６０１の監視の結果、或るトピックを購読しているメッセージ処理装置１０で低負荷状態が検知されたものとする。なお、低負荷状態が検知されなかった場合は、以降のステップＳ６０２〜ステップＳ６０４は実行されない。
【０１６０】
購読制御装置５０のメッセージ送受信部５１０は、稼働停止依頼メッセージと、購読解除依頼メッセージとをメッセージ処理装置１０−２に送信する（ステップＳ６０２）。購読登録依頼メッセージには、当該トピックを示すトピックＩＤが指定される。
【０１６１】
ここで、メッセージ処理装置１０−２は、例えば、当該トピックを購読しているメッセージ処理装置１０のうち、最も優先度が低いメッセージ処理装置１０である。このように、購読制御装置５０は、或るトピックを購読しているメッセージ処理装置１０で低負荷状態が検知された場合、当該トピックを購読しているメッセージ処理装置１０のうち、最も優先度が低いメッセージ処理装置１０に稼働停止依頼メッセージ及び購読解除依頼メッセージに送信する。
【０１６２】
次に、メッセージ処理装置１０−２の実行制御部１２０は、共有情報管理装置４０の記憶部４１０に記憶されている処理調整情報１０００を更新する（ステップＳ６０３）。すなわち、実行制御部１２０は、例えば、購読対象トピックを示すトピックＩＤ及び自身の装置ＩＤが含まれるレコードの稼働状態を「停止」に更新する。
【０１６３】
次に、メッセージ処理装置１０−２のメッセージ送受信部１１０は、購読解除メッセージと、異常通知終了メッセージとをメッセージブローカー装置２０に送信する（ステップＳ６０４）。購読解除メッセージには、購読解除の対象のトピックとして、当該トピック（トピックＩＤ）が指定される。また、購読解除メッセージには、自身（メッセージ処理装置１０−４）を識別する識別情報も指定される。また、異常通知終了メッセージには、例えば、自身を識別する識別情報（例えば、装置ＩＤ等）が含まれる。これにより、当該メッセージ処理装置１０−２が当該トピックを購読することと、異常が発生した場合に異常通知メッセージを送信することとの登録がメッセージブローカー装置２０から削除される。
【０１６４】
その後、メッセージ処理装置１０−２は、稼働を停止する。ここで、稼働の停止とは、メッセージ処理装置１０を実現する物理サーバの電源断に限られない。例えば、プログラムの終了、メッセージ処理の対象から外す設定に変更する等でも良い。また、メッセージ処理装置１０が仮想サーバやコンテナで実現されている場合は、これらの仮想サーバやコンテナの破棄等の処理を実行することでも良い。
【０１６５】
このように、本実施形態に係るメッセージ処理システム１では、同一のトピックを購読しているメッセージ処理装置１０が低負荷状態となった場合、購読制御装置５０は、当該トピックを購読しているメッセージ処理装置１０のうち、最も優先度の低いメッセージ処理装置１０の購読を解除させると共に稼働を停止させる。これにより、本実施形態に係るメッセージ処理システム１は、同一のトピックを購読しているメッセージ処理装置１０が低負荷状態となった場合に、物理サーバの消費電力やクラウドサービスの利用時間に応じた費用等の無駄を防止することができる。
【０１６６】
本発明は、具体的に開示された上記の実施形態に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
【符号の説明】
【０１６７】
１        メッセージ処理システム
１０      メッセージ処理装置
２０      メッセージブローカー装置
３０      メッセージ送信装置
４０      共有情報管理装置
１１０    メッセージ送受信部
１２０    実行制御部
１３０    メッセージ処理部
４１０    記憶部
１０００  処理調整情報
２０００  処理管理情報
３０００  処理割当情報
【図１】
2019160274.tif 000003
【図２】
2019160274.tif 000004
【図３】
2019160274.tif 000005
【図４】
2019160274.tif 000006
【図５】
2019160274.tif 000007
【図６】
2019160274.tif 000008
【図７】
2019160274.tif 000009
【図８】
2019160274.tif 000010
【図９】
2019160274.tif 000011
【図１０】
2019160274.tif 000012
【図１１】
2019160274.tif 000013
【図１２】
2019160274.tif 000014
【図１３】
2019160274.tif 000015
【図１４】
2019160274.tif 000016
【図１５】
2019160274.tif 000017
【図１６】
2019160274.tif 000018
【図１７】
2019160274.tif 000019