(57)【要約】【課題】既存の通信プロトコルに基づいており、フロー制御に加えて、優先度制御が可能なメッセージング基盤を提供することを目的とする。【解決手段】複数の計算機間でメッセージを転送する通信システムにおける通信方法であって、計算機はメッセージ送信部又はメッセージ受信部の少なくとも一方を備え、少なくとも一以上の計算機はメッセージ制御部とメッセージ管理部とを備え、メッセージ管理部が、メッセージ制御部を備える前記計算機の負荷又は各メッセージ送信部から送信されたメッセージの送信量若しくはメッセージの送信数の少なくともいずれかを取得するステップと、優先度設定を取得するステップと、各メッセージ送信部が送信可能なメッセージの容量を決定するステップと、各メッセージ送信部が送信可能なメッセージの容量に基づいて、メッセージの送信量を制御するステップと、を含む。【選択図】図２
2011182115.tif 000002
【特許請求の範囲】
【請求項１】
複数の計算機間でメッセージを転送する通信システムにおける通信方法であって、
前記計算機は、プロセッサと、前記プロセッサに接続されるメモリと、前記プロセッサに接続され、他の前記計算機と通信するためのネットワークインタフェースとを備え、
前記各計算機は、前記メッセージを送信するためのメッセージ送信部、又は前記メッセージ送信部から送信されたメッセージを受信するためのメッセージ受信部の少なくとも一方を備え、
少なくとも一以上の前記計算機は、前記メッセージの伝達を制御するメッセージ制御部と、前記各メッセージ送信部から送信されるメッセージの転送の優先度を制御するメッセージ管理部と、を備え、
前記方法は、
前記メッセージ管理部が、前記メッセージ制御部を備える前記計算機の負荷、又は、前記各メッセージ送信部から送信されたメッセージの送信量若しくはメッセージの送信数の少なくともいずれかを取得する第１のステップと、
前記メッセージ管理部が、前記各メッセージの転送の優先度を制御するための優先度設定を取得する第２のステップと、
前記メッセージ管理部が、前記取得された優先度設定と、前記取得された計算機の負荷又は前記取得されたメッセージの送信量とに基づいて、前記各メッセージ送信部が送信可能なメッセージの容量を決定する第３のステップと、
前記メッセージ管理部が、前記決定された各メッセージ送信部が送信可能なメッセージの容量を前記各メッセージ送信部に送信する第４のステップと、
前記各メッセージ送信部が、前記受信した各メッセージ送信部が送信可能なメッセージの容量に基づいて、前記メッセージの送信量を制御する第５のステップと、を含むことを特徴とする通信方法。
【請求項２】
前記各メッセージ送信部が送信可能なメッセージの容量は、前記各メッセージ送信部が単位時間に送信可能なメッセージの容量であることを特徴とする請求項１に記載の通信方法。
【請求項３】
前記各メッセージ送信部が送信可能なメッセージの容量は、前記各メッセージ送信部が所定の容量のメッセージを送信する時間間隔であり、
前記メッセージ管理部は、前記各メッセージ送信部が所定の容量のメッセージを送信する時間間隔に基づいて、前記各メッセージ送信部に送信可能なメッセージのうち、前記所定の容量の前記メッセージを送信することを特徴とする請求項１に記載の通信方法。
【請求項４】
前記第３のステップは、
前記メッセージ管理部が、前記取得されたメッセージの送信量を用いて、前記各メッセージ送信部がメッセージの転送に使用可能な帯域を算出する第６のステップと、
前記メッセージ管理部が、前記算出された各メッセージ送信部がメッセージの転送に使用可能な帯域、及び前記取得された計算機の負荷を用いて、前記各メッセージ送信部が送信可能なメッセージの容量を決定する第７のステップと、を含むことを特徴とする請求項１に記載の通信方法。
【請求項５】
前記優先度情報は、全メッセージ送信部がメッセージの送信に使用可能な帯域の合計値と、前記各メッセージ送信部がメッセージの送信に使用可能な帯域の比率と、を含み、
前記第６のステップは、
前記全メッセージ送信部がメッセージの送信に使用可能な帯域の合計値と、前記各メッセージ送信部がメッセージの送信に使用可能な帯域の比率とを用いて、前記各メッセージ送信部がメッセージの送信に使用可能な準備割当帯域を算出するステップと、
前記各メッセージ送信部によってメッセージの送信に使用された帯域を取得し、前記全メッセージ送信部によってメッセージの送信に使用された帯域の合計値を算出するステップと、
前記算出された全メッセージ送信部によってメッセージの送信に使用された帯域の合計値が、前記メッセージ送信部がメッセージの送信に使用可能な全ての帯域以上であるか否かを判定するステップと、
前記算出された全メッセージ送信部によってメッセージの送信に使用された帯域の合計値が、前記メッセージ送信部がメッセージの送信に使用可能な全ての帯域以上であるか否かの判定結果に基づいて、前記各メッセージ送信部によってメッセージの送信に使用された帯域と前記各メッセージ送信部がメッセージの送信に使用可能な準備割当帯域との差を、前記各メッセージ送信部において算出するステップと、
前記各メッセージ送信部によってメッセージの送信に使用された帯域と前記各メッセージ送信部がメッセージの送信に使用可能な準備割当帯域との差の前記全メッセージ送信部における合計値を算出するステップと、
前記全メッセージ送信部がメッセージの送信に使用可能な帯域の合計値、前記各メッセージ送信部がメッセージの送信に使用可能な帯域の比率、及び前記前記各メッセージ送信部によってメッセージの送信に使用された帯域と前記各メッセージ送信部がメッセージの送信に使用可能な準備割当帯域との差の全メッセージ送信部における合計値を用いて、前記各メッセージ送信部がメッセージの送信に使用可能な割当帯域を算出するステップと、を含むことを特徴とする請求項４に記載の通信方法。
【請求項６】
前記優先度情報は、さらに、前記メッセージ制御部を備える計算機の負荷の上限値と、を含み、
前記第７のステップは、
前記各メッセージ送信部に前回割り当てられたメッセージの送信に使用可能な帯域の合計値を取得するステップと、
前記各メッセージ送信部が前回送信したメッセージを転送した時の前記メッセージ制御部を備える計算機の負荷を取得するステップと、
前記各メッセージ送信部に前回割り当てられたメッセージの送信に使用可能な帯域の合計値と、前記各メッセージ送信部が前回送信したメッセージを転送した時のメッセージ制御部を備える計算機の負荷とに基づいて、前記メッセージ制御部を備える計算機の負荷の予測値を算出するステップと、
前記算出されたメッセージ制御部を備える計算機の負荷の予測値が前記メッセージ制御部を備える計算機の負荷の上限値より大きい場合には、前記メッセージ制御部を備える計算機の負荷が前記メッセージ制御部を備える計算機の負荷の上限値以下になるように、前記算出された各メッセージ送信部がメッセージの送信に使用可能な割当帯域を減少させるステップと、を含むことを特徴とする請求項５に記載の通信方法。
【請求項７】
複数の計算機間でメッセージを転送する通信システムであって、
前記計算機は、プロセッサと、前記プロセッサに接続されるメモリと、前記プロセッサに接続され、他の前記計算機と通信するためのネットワークインタフェースとを備え、
前記各計算機は、前記メッセージを送信するためのメッセージ送信部、又は前記メッセージ送信部から送信されたメッセージを受信するためのメッセージ受信部の少なくとも一方を備え、
少なくとも一以上の前記計算機は、前記メッセージの伝達を制御するメッセージ制御部と、前記各メッセージ送信部から送信されるメッセージの転送の優先度を制御するメッセージ管理部と、を備え、
前記メッセージ管理部は、
前記メッセージ制御部を備える前記計算機の負荷、又は、前記各メッセージ送信部から送信されたメッセージの送信量若しくはメッセージの送信数の少なくともいずれかを取得し、
前記各メッセージの転送の優先度を制御するための優先度設定を取得し、
前記取得された優先度設定と、前記取得された計算機の負荷又は前記取得されたメッセージの送信量とに基づいて、前記各メッセージ送信部が送信可能なメッセージの容量を決定し、
前記決定された各メッセージ送信部が送信可能なメッセージの容量を前記各メッセージ送信部に送信し、
前記各メッセージ送信部は、
前記受信した各メッセージ送信部が送信可能なメッセージの容量に基づいて、前記メッセージの送信量を制御することを特徴とする通信システム。
【請求項８】
前記各メッセージ送信部が送信可能なメッセージの容量は、前記各メッセージ送信部が単位時間に送信可能なメッセージの容量であることを特徴とする請求項７に記載の通信システム。
【請求項９】
前記各メッセージ送信部が送信可能なメッセージの容量は、前記各メッセージ送信部が所定の容量のメッセージを送信する時間間隔であり、
前記メッセージ管理部は、前記各メッセージ送信部が所定の容量のメッセージを送信する時間間隔に基づいて、前記各メッセージ送信部に送信可能なメッセージのうち、前記所定の容量の前記メッセージを送信することを特徴とすることを特徴とする請求項７に記載の通信システム。
【請求項１０】
前記メッセージ管理部は、
前記メッセージ送信部と前記メッセージ制御部との間、又は、前記メッセージ制御部と前記メッセージ受信部との間の少なくともいずれか一方のメッセージの転送を中継し、
前記メッセージ送信部と前記メッセージ制御部との間のメッセージの送信量、又は、前記メッセージ制御部と前記メッセージ受信部との間のメッセージの送信量の少なくともいずれか一方を取得することを特徴とする請求項７に記載の通信システム。
【請求項１１】
前記複数の計算機は、第１の計算機、第２の計算機及び第３の計算機を含み、
前記メッセージ送信部は前記第１の計算機に備わり、前記メッセージ制御部は前記第２の計算機に備わり、前記メッセージ受信部は前記第３の計算機に備わり、
前記メッセージ制御部は、前記メッセージ管理部を含み、
前記第２の計算機は、
前記メッセージ送信部から前記メッセージ受信部に転送されるメッセージを中継するために、前記第１の計算機と前記第３の計算機との間を接続し、
前記第２の計算機の負荷、又は、前記第１の計算機から送信されたメッセージの送信量の少なくともいずれかを取得し、
前記各メッセージの転送の優先度を制御するための優先度設定を取得し、
前記取得された優先度設定と、前記取得された第２の計算機の負荷又は前記取得された第１の計算機から送信されたメッセージの送信量とに基づいて、前記第１の計算機から送信可能なメッセージの容量を示す情報を決定し、
前記決定された第１の計算機から送信可能なメッセージの容量を前記第１の計算機に送信し、
前記第１の計算機は、前記受信した第１の計算機から送信可能なメッセージの容量に基づいて、前記第１の計算機から送信されるメッセージの送信量を制御することを特徴とする請求項７に記載の通信システム。
【請求項１２】
前記複数の計算機は、第１の計算機、第２の計算機、第３の計算機及び第４の計算機を含み、
前記メッセージ送信部は前記第１の計算機に備わり、前記メッセージ制御部は前記第２の計算機に備わり、前記メッセージ管理部は前記第３の計算機に備わり、前記メッセージ受信部は前記第４の計算機に備えられ、
前記第２の計算機は、前記メッセージ送信部から前記メッセージ受信部に転送されるメッセージを中継するために、前記第３の計算機と前記第４の計算機との間を接続し、
前記第３の計算機は、前記第１の計算機と前記第２の計算機との間のメッセージの転送を中継するために、前記第１の計算機と前記第２の計算機との間を接続し、
前記メッセージ管理部は、
当該第２の計算機の負荷、又は、前記第１の計算機から送信されたメッセージの送信量の少なくともいずれかを取得し、
前記各メッセージの転送の優先度を制御するための優先度設定を取得し、
前記取得された優先度設定と、前記取得された第２の計算機の負荷又は前記取得された第１の計算機から送信されたメッセージの送信量とに基づいて、前記第１の計算機が送信可能なメッセージの容量を決定し、
前記決定された第１の計算機が送信可能なメッセージの容量を前記第１の計算機に送信し、
前記第１の計算機は、前記受信した第１の計算機が送信可能なメッセージの容量に基づいて、前記第１の計算機から送信されるメッセージの送信量を制御することを特徴とする請求項７に記載の通信システム。
【請求項１３】
前記複数の計算機は、第１の計算機、第２の計算機、第３の計算機及び第４の計算機を含み、
前記メッセージ送信部は前記第１の計算機に備わり、前記メッセージ制御部は前記第２の計算機に備わり、前記メッセージ管理部は前記第３の計算機に備わり、前記メッセージ受信部は前記第４の計算機に備わり、
前記第２の計算機は、前記メッセージ送信部から前記メッセージ受信部に転送されるメッセージを中継するために、前記第１の計算機と前記第３の計算機との間を接続し、
前記第３の計算機は、前記第２の計算機と前記第４の計算機との間のメッセージの転送を中継するために、前記第２の計算機と前記第４の計算機との間を接続し、
前記メッセージ管理部は、
前記第２の計算機から送信されたメッセージの送信量を取得し、
前記各メッセージの転送の優先度を制御するための優先度設定を取得し、
前記取得された優先度設定と、前記取得された第２の計算機から送信されたメッセージの送信量とに基づいて、前記第２の計算機が送信可能なメッセージの容量を決定し、
前記決定された第２の計算機が送信可能なメッセージの容量を前記第２の計算機に送信し、
前記第２の計算機は、前記受信した第２の計算機が送信可能なメッセージの容量に基づいて、前記第２の計算機から送信されるメッセージの送信量を制御することを特徴とする請求項７に記載の通信システム。
【請求項１４】
複数の計算機間でメッセージを転送する通信システムにおけるサーバであって、
前記サーバは、プロセッサと、前記プロセッサに接続されるメモリと、前記プロセッサに接続され、他の前記計算機と通信するためのネットワークインタフェースとを備え、
一以上のメッセージを送信する第１の計算機と、一以上のメッセージを受信する第２の計算機との間のメッセージの転送を中継するように、前記一以上の第１の計算機と前記一以上の第２の計算機とに接続され、
前記メッセージの伝達を制御するメッセージ制御部と、
前記各メッセージ送信部から送信されるメッセージの転送の優先度を制御するメッセージ管理部と、を備え、
前記メッセージ管理部は、
前記サーバの負荷、又は、前記各第１の計算機から送信されたメッセージの送信量の少なくともいずれかを取得し、
前記各メッセージの転送の優先度を制御するための優先度設定を取得し、
前記メッセージ管理部が、前記取得された優先度設定と、前記取得されたサーバの負荷又は前記取得された各第１の計算機から送信されたメッセージの送信量とに基づいて、前記各第１の計算機が送信可能なメッセージの容量を制御するための情報を決定し、
前記決定された各第１の計算機が送信可能なメッセージの容量を制御するための情報を前記各第１の計算機に送信することを特徴とするサーバ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ・ネットワークの分野に関する。具体的には、メッセージング基盤における複数のメッセージ伝達間の優先度制御技術に関する。
【背景技術】
【０００２】
コンピュータ・ネットワークを介したアプリケーション間の通信においては、各アプリケーション、アプリケーションが動作する各コンピュータ、通信を仲介するルータ等の各装置が使用できるネットワーク帯域、Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ（ＣＰＵ）の処理能力、及び、メモリ容量等の資源が有限であるため、通信品質が制限される。
【０００３】
通信品質としては、信頼性、遅延、及び帯域が考慮される。通信品質のうち、信頼性については、冗長化等によって確保することが可能である。また、通信の遅延については、帯域の制御と、Ｗｅｉｇｈｔｅｄ  Ｆａｉｒ  Ｑｕｅｕｉｎｇ（ＷＦＱ）とよばれる通信順序の制御によって保証できる（例えば、非特許文献１参照）。
【０００４】
帯域については、個々の通信の送信側が送るデータ量が受信側の処理能力を超えないように制御するフロー制御と、複数の通信間において有限な資源を共有するための通信間の優先度制御とが必要となる。従って、フロー制御と優先度制御とによって通信品質は保証される。
【０００５】
複数アプリケーション間の通信方式として、疎結合を特徴とするメッセージング基盤が提案されている。メッセージング基盤では、データをメッセージという形で扱い、メッセージの送信者がメッセージ伝達を仲介するメッセージサーバにメッセージを送り、メッセージサーバがメッセージの受信者にメッセージを送るという形で通信を行うことで疎結合を実現している（例えば、特許文献１参照）。
【０００６】
すなわち、メッセージング基盤においては、メッセージ送信者からメッセージ受信者へのメッセージの伝達が、メッセージ送信者とメッセージサーバとの間の通信、及びメッセージサーバとメッセージ受信者との間の通信という２種類の通信によって実現される。
【０００７】
以下、本明細書では、「伝達」の語は、メッセージ送信者からメッセージ受信者へメッセージを伝えることを表現するものとし、メッセージの「伝達」と他の通信とを区別して扱う。
【０００８】
メッセージング基盤は、多数のメッセージ送信者と多数のメッセージ受信者との間でメッセージ伝達を行うため、全てのメッセージ送信者とメッセージ受信者とは定められた通信プロトコルに従ってメッセージサーバと通信する必要がある。
【０００９】
また、メッセージサーバは、有限な資源の中でメッセージ送信者からメッセージ受信者への複数のメッセージ伝達を仲介するために、フロー制御と優先度制御とによって通信品質を保証する必要がある。
【００１０】
特許文献１では、メッセージ送信者からメッセージ受信者へのメッセージ伝達において、メッセージサーバが、他のメッセージサーバと連携してメッセージを伝達する方法が開示されている。なお、特許文献１においては、メッセージサーバはブローカーという用語で表現されている。
【００１１】
また、メッセージング基盤で用いられる通信プロトコルとして、Ａｄｖａｎｃｅｄ  Ｍｅｓｓａｇｅ  Ｑｕｅｕｉｎｇ  Ｐｒｏｔｏｃｏｌ（ＡＭＱＰ）が提案されている（例えば、非特許文献２参照）。
【００１２】
非特許文献２では、メッセージ送信者及びメッセージ受信者とメッセージサーバとの通信方法、並びに、メッセージサーバの動作が規定されている。そして、メッセージ送信者及びメッセージ受信者とメッセージサーバとの通信方法において、メッセージ送信者からメッセージサーバへのメッセージ送信と、メッセージサーバからメッセージ受信者へのメッセージ送信を制御するフロー制御について規定されている。なお、非特許文献２においては、メッセージサーバはＳｅｒｖｅｒ、メッセージ送信者はＰｕｂｌｉｓｈｅｒ、メッセージ受信者はＣｏｎｓｕｍｅｒという用語でそれぞれ表現されている。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特表２００６−５２３９０５号広報
【非特許文献】
【００１４】
【非特許文献１】A. Parekh and R. Gallerger, "A generalized processor sharing approach to flow control in integrated services networks: the single node case," IEEE ACM transaction on Networking, 1993.
【非特許文献２】AMQP Workgroup, "AMQP 0-10 Specification"
【発明の概要】
【発明が解決しようとする課題】
【００１５】
前述したように、メッセージング基盤においてメッセージ伝達の通信品質を保証するためには、フロー制御と優先度制御とを行う必要がある。
【００１６】
しかし、特許文献１に記載されるメッセージサーバにおいては、通信品質について考慮されていない。また、非特許文献２には、通信のフロー制御方法については規定されているが、通信の優先度制御については規定されていない。
【００１７】
従って、特許文献１及び非特許文献２を用いたメッセージング基盤では、複数のメッセージ伝達の間で優先度制御ができない。その結果、例えば、あるメッセージ送信者が大量のメッセージを送信した場合に、メッセージ伝達のためのネットワーク帯域又はメッセージサーバのＣＰＵの処理能力などの資源が不足し、他のメッセージ送信者からのメッセージが伝達されづらくなるといった、メッセージ伝達の通信品質を保証できないという問題がある。
【００１８】
また、メッセージング基盤においては、全てのメッセージ送信者及びメッセージ受信者が、定められた通信プロトコルに従ってメッセージサーバと通信する必要がある。そのため、既存の通信プロトコルを拡張して優先度制御機能を追加しても、当該拡張部分を解釈できないメッセージ送信者又はメッセージ受信者がひとつでも存在すると、当該メッセージ送信者又はメッセージ受信者に対して優先度制御が行えない。その結果、通信全体の優先度制御も行うことができない。
【００１９】
従って、解決されるべき課題は、既存の通信プロトコルに基づいて、フロー制御に加えて、さらに優先度制御が可能なメッセージング基盤を提供することである。
【課題を解決するための手段】
【００２０】
本発明の代表的な一例を示せば以下の通りである。すなわち、複数の計算機間でメッセージを転送する通信システムにおける通信方法であって、前記計算機は、プロセッサと、前記プロセッサに接続されるメモリと、前記プロセッサに接続され、他の前記計算機と通信するためのネットワークインタフェースとを備え、前記各計算機は、前記メッセージを送信するためのメッセージ送信部、又は前記メッセージ送信部から送信されたメッセージを受信するためのメッセージ受信部の少なくとも一方を備え、少なくとも一以上の前記計算機は、前記メッセージの伝達を制御するメッセージ制御部と、前記各メッセージ送信部から送信されるメッセージの転送の優先度を制御するメッセージ管理部と、を備え、前記方法は、前記メッセージ管理部が、前記メッセージ制御部を備える前記計算機の負荷、又は、前記各メッセージ送信部から送信されたメッセージの送信量若しくはメッセージの送信数の少なくともいずれかを取得する第１のステップと、前記メッセージ管理部が、前記各メッセージの転送の優先度を制御するための優先度設定を取得する第２のステップと、前記メッセージ管理部が、前記取得された優先度設定と、前記取得された計算機の負荷又は前記取得されたメッセージの送信量とに基づいて、前記各メッセージ送信部が送信可能なメッセージの容量を決定する第３のステップと、前記メッセージ管理部が、前記決定された各メッセージ送信部が送信可能なメッセージの容量を前記各メッセージ送信部に送信する第４のステップと、前記各メッセージ送信部が、前記受信した各メッセージ送信部が送信可能なメッセージの容量に基づいて、前記メッセージの送信量を制御する第５のステップと、を含むことを特徴とする。
【発明の効果】
【００２１】
本発明の一実施形態によれば、複数のメッセージの転送の間における優先度制御が可能となる。
【図面の簡単な説明】
【００２２】
【図１】本発明の第１の実施形態のメッセージング基盤システム全体の構成例を示すブロック図である。
【図２】本発明第１の実施形態におけるメッセージ基盤システム全体のソフトウェア構成を説明するブロック図である。
【図３】本発明の第１の実施形態のメッセージサーバのソフトウェア構成を説明するブロック図である。
【図４】本発明の第１の実施形態のメッセージサーバにおける受信／配送部の処理を説明するフローチャートである。
【図５】本発明の第１の実施形態のメッセージサーバにおける送信部の処理を説明するフローチャートである。
【図６】本発明の第１の実施形態のメッセージサーバにおけるキュー部の処理を説明するフローチャートである。
【図７】本発明の第１の実施形態のメッセージサーバにおけるクレジット集中管理部の処理を説明するフローチャートである。
【図８】本発明の第１の実施形態のメッセージサーバにおけるクレジット集中管理部が実行する発行クレジット算出処理を説明するフローチャートである。
【図９】本発明の第２の実施形態におけるメッセージング基盤システム全体のソフトウェア構成を説明するブロック図である。
【図１０】本発明第２の実施形態のＱｏＳ制御部の構成を説明するブロック図である。
【図１１】本発明の第２の実施形態のＱｏＳ制御部における転送制御部の処理を説明するフローチャートである。
【図１２】本発明の第２の実施形態のＱｏＳ制御部におけるクレジット集中管理部の処理を説明するフローチャートである。
【図１３】本発明の第３の実施形態におけるメッセージ基盤システム全体のソフトウェア構成を説明するブロック図である。
【図１４】本発明の第４の実施形態におけるメッセージ基盤システム全体のソフトウェア構成を説明するブロック図である。
【図１５】本発明の第５の実施形態におけるメッセージ基盤システム全体のソフトウェア構成を説明するブロック図である。
【図１６】本発明の第５の実施形態のＱｏＳ制御部に含まれるクレジット集中管理部の処理を説明するフローチャートである。
【図１７】本発明の第１の実施形態のサーバ状態情報の一例を示す説明図である。
【図１８】本発明の第１の実施形態の優先度情報の一例を示す説明図である。
【図１９】本発明の第１の実施形態の配送状態の一例を示す説明図である。
【図２０】本発明の第１の実施形態のキュー状態の一例を示す説明図である。
【図２１】本発明の第１の実施形態のクレジット管理情報の一例を示す説明図である。
【図２２】クレジット集中管理部を備えていないメッセージサーバのソフトウェア構成を説明するブロック図である。
【発明を実施するための形態】
【００２３】
以下、本発明を実施するための最良の形態を図に即して説明する。
【００２４】
（第１の実施形態）
図１は、本発明の第１の実施形態のメッセージング基盤システム全体の構成例を示すブロック図である。
【００２５】
本実施形態のメッセージング基盤システムは、メッセージサーバ装置１０１、メッセージクライアント装置１０２及びメッセージクライアント装置１０３の三つの計算機を備え、ネットワーク１０４を介して互いに接続される。
【００２６】
本実施形態では、メッセージクライアント装置１０２からメッセージクライアント装置１０３に情報を適切に伝達することを目的とする。情報はメッセージという単位で扱われる。
【００２７】
まず、メッセージクライアント装置１０２は、メッセージクライアント装置１０３に送信する情報をメッセージとして、ネットワーク１０４を介してメッセージサーバ装置１０１に送信する。
【００２８】
メッセージサーバ装置１０１は、メッセージクライアント装置１０２から受信したメッセージに対して、必要な場合は蓄積又は変換を実行した後、ネットワーク１０４を介してメッセージクライアント装置１０３に送信する。
【００２９】
以上の処理によって、メッセージクライアント装置１０３は、メッセージクライアント装置１０２からのメッセージを受信し、情報の伝達が完了する。
【００３０】
メッセージクライアント装置１０２からメッセージクライアント装置１０３への情報の伝達において、メッセージサーバ装置１０１が仲介することによって、メッセージサーバ装置１０１が情報伝達を制御することが可能となり、ユーザの要求に応じた通信品質保証、メッセージクライアント装置１０２、１０３の性質若しくは状態に合わせた通信、又は、送信先のメッセージクライアント装置を変更するなどの柔軟な情報伝達が可能となる。
【００３１】
本実施形態では、前述した情報伝達を実現するため、メッセージサーバ装置１０１、メッセージクライアント装置１０２及びメッセージクライアント装置１０３の各計算機上でプログラムが実行される。各計算機は以下のようなハードウェア構成をとる。
【００３２】
メッセージサーバ装置１０１は、ネットワーク１０４を介して、メッセージクライアント装置１０２及びメッセージクライアント装置１０３と通信する。
【００３３】
メッセージサーバ装置１０１は、ＣＰＵ１０５、記憶装置１０６、入出力装置１０７及びネットワークインタフェース１０８を備え、共通バス１０９を介して互いに接続される。
【００３４】
ＣＰＵ１０５は、中央演算装置（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）であり、記憶装置１０６上に展開されたプログラムを実行する。ＣＰＵ１０５が記憶装置１０６上に展開されたプログラムを実行することによって、メッセージサーバ装置１０１が備える機能を実現できる。
【００３５】
記憶装置１０６は、ＣＰＵ１０５によって実行されるプログラム並びに当該プログラムが実行されることによって作成されるデータ及び設定を格納する。記憶装置１０６は、例えば、メモリ、ハードディスク、若しくは光ディスク等のデータを記憶できる装置（遠隔地に設置され、ネットワーク１０４を介して通信される装置を含む）、又はこれらを組み合わせたものが考えられる。
【００３６】
本実施形態では、記憶装置１０６にはプログラムであるメッセージサーバ１２０が展開され、ＣＰＵ１０５によって実行される。また、記憶装置１０６は、サーバ状態１２１、優先度情報１２２、配送状態１２３、キュー状態１２４、及びクレジット管理情報１２５が格納される。前述したデータはメッセージサーバ１２０によって作成された情報であり、詳細については図１７〜図２１を用いて後述する。なお、記憶装置１０６には、メッセージサーバ１２０によって作成された、他のデータが格納されていてもよい。
【００３７】
入出力装置１０７は、メッセージサーバ装置１０１に対して情報の入出力を行う装置である。入出力装置１０７は、例えば、スイッチ、キーボード、マウス、マイクロホン、ビデオカメラ、ディスプレイ、又はスピーカなど機器が考えられる。また、入出力装置１０７には、信号ケーブル又は電波及び赤外線等の無線を介して行うシリアル通信などの通信によるものも含まれる。メッセージサーバ装置１０１は、入出力装置１０７によって、ユーザ又は管理者からの指示を受けたり、結果を出力したりすることが可能となる。
【００３８】
ネットワークインタフェース１０８は、ネットワーク１０４を介して他の計算機と通信するための装置であり、例えばイーサネット（登録商標、以下同じ）カードなどが考えられる。計算機間の通信は、ＣＰＵ１０５の指示に従ってネットワークインタフェース１０８を通して行われる。
【００３９】
ただし、他の機器と通信が可能であればよいため、通信方法はイーサネットに限らず、例えば、シリアル通信などが考えられる。イーサネット以外の通信方法を用いることによって、消費電力を減らしたり、通信速度を上げたり、又は情報伝達の安全性を向上したりできる。
【００４０】
また、共通バス１０９は、メッセージサーバ装置１０１の各構成要素間の通信を行うためのものであるが、本発明ではこれに限定されない。各構成要素間で必要な通信を行えるようになっていれば、共通バスを用いる以外の方法によって接続されてもよい。例えば、各構成要素を直接接続することによって、要素間の接続を最適化し、処理に必要な消費電力を減らしたり、処理効率を上げたりすることが可能となる。
【００４１】
メッセージクライアント装置１０２は、ネットワーク１０４を介して、メッセージサーバ装置１０１と通信する。本実施形態では、メッセージクライアント装置１０２は、メッセージサーバ装置１０１にメッセージを送信する。
【００４２】
メッセージクライアント装置１０２は、ＣＰＵ１１０、記憶装置１１１、入出力装置１１２及びネットワークインタフェース１１３を備え、共通バス１１４を介して互いに接続される。
【００４３】
ＣＰＵ１１０は、中央演算装置（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）であり、記憶装置１１１上に展開されたプログラムを実行する。ＣＰＵ１１０が記憶装置１１１上に展開されたプログラムを実行することによって、メッセージクライアント装置１０２が備える機能を実現できる。
【００４４】
記憶装置１１１は、ＣＰＵ１１０によって実行されるプログラム並びに当該プログラムが実行されることによって作成されるデータ及び設定を格納する。記憶装置１１１は、例えば、メモリ、ハードディスク、若しくは光ディスク等のデータを記憶できる装置（遠隔地に設置され、ネットワーク１０４を介して通信される装置を含む)、又はこれらを組み合わせたものが考えられる。
【００４５】
本実施形態では、記憶装置１１１にはプログラムであるメッセージ送信者１２６が展開され、ＣＰＵ１１０によって実行される。なお、記憶装置１１１には図示しないデータが格納されていてもよい。
【００４６】
入出力装置１１２は、メッセージクライアント装置１０２に対して情報の入出力を行う装置である。入出力装置１１２は、例えば、スイッチ、キーボード、マウス、マイクロホン、ビデオカメラ、ディスプレイ、又はスピーカなど機器が考えられる。また、入出力装置１１２には、信号ケーブル又は電波及び赤外線等の無線を介して行うシリアル通信などの通信によるものも含まれる。メッセージクライアント装置１０２は、入出力装置１１２によって、ユーザ又は管理者からの指示を受けたり、結果を出力したりすることが可能となる。
【００４７】
ネットワークインタフェース１１３は、ネットワーク１０４を介して他の計算機と通信するための装置であり、例えばイーサネットカードなどが考えられる。計算機間の通信は、ＣＰＵ１１０の指示に従ってネットワークインタフェース１１３を通して行われる。
【００４８】
ただし、他の機器と通信が可能であればよいため、通信方法はイーサネットに限らず、例えば、シリアル通信などが考えられる。イーサネット以外の通信方法を用いることによって、消費電力を減らしたり、通信速度を上げたり、又は情報伝達の安全性を向上したりできる。
【００４９】
メッセージクライアント装置１０３は、ネットワーク１０４を介して、メッセージサーバ装置１０１と通信する。本実施形態では、メッセージクライアント装置１０３は、メッセージサーバ装置１０１からメッセージを受信する。
【００５０】
メッセージクライアント装置１０３は、ＣＰＵ１１５、記憶装置１１６、入出力装置１１７及びネットワークインタフェース１１８を備え、共通バス１１９を介して互いに接続される。
【００５１】
ＣＰＵ１１５は、中央演算装置（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）であり、記憶装置１１６上に展開されたプログラムを実行する。ＣＰＵ１１５が記憶装置１１６上に展開されたプログラムを実行することによって、メッセージクライアント装置１０３が備える機能を実現できる。
【００５２】
記憶装置１１６は、ＣＰＵ１１５によって実行されるプログラム並びに当該プログラムが実行されることによって作成されるデータ及び設定を格納する。記憶装置１１６は、例えば、メモリ、ハードディスク、若しくは光ディスク等のデータを記憶できる装置（遠隔地に設置され、ネットワーク１０４を介して通信される装置を含む)、又はこれらを組み合わせたものが考えられる。
【００５３】
本実施形態では、記憶装置１１６にはプログラムであるメッセージ受信者１２７が展開され、ＣＰＵ１１５によって実行される。なお、記憶装置１１６には図示しないデータが格納されていてもよい。
【００５４】
入出力装置１１７は、メッセージクライアント装置１０３に対して情報の入出力を行う装置である。入出力装置１１７は、例えば、スイッチ、キーボード、マウス、マイクロホン、ビデオカメラ、ディスプレイ、若しくはスピーカなど機器が考えられる。また、入出力装置１１７には、信号ケーブル若しくは電波及び赤外線等の無線を介して行うシリアル通信などの通信によるものも含まれる。メッセージクライアント装置１０３は、入出力装置１１７によって、ユーザ又は管理者からの指示を受けたり、結果を出力したりすることが可能となる。
【００５５】
ネットワークインタフェース１１８は、ネットワーク１０４を介して他の計算機と通信するための装置であり、例えばイーサネットカードなどが考えられる。計算機間の通信は、ＣＰＵ１１５の指示に従ってネットワークインタフェース１１８を通して行われる。
【００５６】
ただし、他の機器と通信が可能であればよいため、通信方法はイーサネットに限らず、例えば、シリアル通信などが考えられる。イーサネット以外の通信方法を用いることによって、消費電力を減らしたり、通信速度を上げたり、又は情報伝達の安全性を向上したりできる。
【００５７】
なお、本実施形態では、三つの計算機から構成されるメッセージング基盤システムを例に説明するが、本発明はこれに限定されない。各計算機が備える機能は各計算機上で実行されるプログラムによって実現されるため、計算機の数は一以上であればよい。
【００５８】
例えば、メッセージ基盤システムがメッセージサーバ装置１０１のみを備える構成である場合、メッセージサーバ装置１０１、メッセージクライアント装置１０２、及びメッセージクライアント装置１０３の機能を備えるプログラムをメッセージサーバ装置１０１上で実行し、管理しやすくしてもよい。また、メッセージクライアント装置の数を増やしてより大きな計算資源を利用することも可能である。
【００５９】
また、本実施形態では、メッセージサーバ装置１０１、メッセージクライアント装置１０２、及びメッセージクライアント装置１０３はそれぞれ単一のＣＰＵを備える構成で説明したが、それぞれの装置が物理的または論理的に複数のＣＰＵを搭載していてもよい。各計算機の機能はプログラムがＣＰＵによって実行されることで実現されているが、実現される機能自体はプログラムが実行されるＣＰＵの個数には依存しないためである。また、各装置に搭載されるネットワークインタフェース、入出力装置、記憶装置の個数についても、同様にそれぞれ１つに限るものではない。
【００６０】
また、本実施形態では、記憶装置１０６、記憶装置１１１及び記憶装置１１６に格納されるプログラムによって実現される機能のうち、一部または全部の機能を、ハードウェアとして実装してもよい。ハードウェアとして実装されることによって、例えば、処理の高速化及び低消費電力化が可能となる。
【００６１】
また、仮想マシンのように、当該ハードウェアが備える機能をプログラムとして実現してもよい。ハードウェアが備える機能をプログラムとして実現することによって、例えば、設置スペースを削減したり、管理を単純化したりできる。
【００６２】
また、プログラムによって実現される機能の構成は、後述する構成（図２及び図３参照）に限るものではなく、後述する構成（図２及び図３参照）のうちの複数の機能が統合される構成、又は一つの機能が複数に分割される構成でもよい。
【００６３】
また、各機能によって実行される処理の順序についても、後述する順序に限るものではなく、処理の依存関係が許すならば、並列で同時に実行したり、順序を入れ替えて実行したりしてもよい。例えば、並列実行することによって処理時間を短縮したり、順序を入れ替えることによって待ち時間を減らしたりすることが可能となる。
【００６４】
図２は、本発明第１の実施形態におけるメッセージ基盤システム全体のソフトウェア構成を説明するブロック図である。
【００６５】
なお、図において、四角又は丸四角は、メッセージサーバ装置１０１、メッセージクライアント装置１０２又はメッセージクライアント装置１０３上で実行されるプログラムによって実現される処理ブロックを表す。また、処理ブロック間の矢印は、矢印の方向に情報又は指示が伝えられることを示す。また、矢印に対するキャプション及び符号は処理ブロック間で伝えられる情報又は指示を表す。
【００６６】
メッセージ送信者３０２、３０３は、メッセージクライアント装置１０２上で実行されるプログラムであり、メッセージ送信者１２６と同一のものである。当該プログラムが実行されることによって、メッセージをメッセージサーバ装置１０１に送信することが可能となる。
【００６７】
具体的には、メッセージ送信者３０２、３０３は、受信／配送部３１５−１、３１５−２から受信した送信制御情報３０７、３０９に従って、適切なデータ量のヘッダ付メッセージ３０６、３０８を受信／配送部３１５−１、３１５−２に送信する。
【００６８】
メッセージ受信者３０４、３０５は、メッセージクライアント装置１０３上で実行されるプログラムであり、メッセージ受信者１２７と同一のものである。当該プログラムが実行されることによって、メッセージをメッセージサーバ装置１０１から受信することが可能となる。
【００６９】
具体的には、メッセージ受信者３０４、３０５は、送信制御情報３１２、３１３を送信部３１７−１、３１７−２に送信することによって、送信部３１７−１、３１７−２から適切なデータ量のヘッダ付メッセージ３１０、３１１を受信する。
【００７０】
メッセージサーバ３０１は、メッセージ伝達を仲介するためのプログラムであり、メッセージサーバ１２０と同一のものである。当該プログラムが実行されることによって、メッセージ送信者３０２、３０３から、メッセージ受信者３０４、３０５へメッセージが伝達される。
【００７１】
メッセージサーバ３０１は、受信／配送部３１５−１、３１５−２、キュー部３１６−１、３１６−２、送信部３１７−１、３１７−２、全体制御部３２２及びクレジット集中管理部３２１を含む。
【００７２】
受信／配送部３１５−１、３１５−２は、メッセージ送信者３０２、３０３からヘッダ付メッセージ３０６、３０８を受信し、適切なキュー部３１６−１、３１６−２にメッセージ３２３、３２５を配送する。
【００７３】
また、受信／配送部３１５−１、３１５−２は、メッセージ送信者３０２、３０３から送信されたデータ量に関する情報である配送状態３２８をクレジット集中管理部３２１に送信し、クレジット集中管理部３２１によって決定されたクレジット（発行クレジット３２７）をクレジット集中管理部３２１から受信する。ここで、クレジットとは、メッセージ送信者（本実施形態では、メッセージ送信者３０２、３０３）が送信可能なメッセージの容量を示す。すなわち、メッセージサーバ装置１０１が受信を想定するメッセージの容量を示す。
【００７４】
また、受信／配送部３１５−１、３１５−２は、メッセージ送信者３０２、３０３が送信可能なメッセージの容量を示す情報、すなわち、発行クレジット３２７を含む送信制御情報３０７、３０９をメッセージ送信者３０２、３０３に送信する。これによって、メッセージ送信者３０２、３０３から送信されるメッセージの容量を制御することが可能となる。
【００７５】
以下、受信／配送部３１５−１、３１５−２を区別しない場合、受信／配送部３１５と記載する。
【００７６】
キュー部３１６−１、３１６−２は、受信／配送部３１５の指示に従ってメッセージ３２３、３２５を保存し、送信部３１７−１、３１７−２の指示に従ってメッセージ３２４、３２６を読み出す。メッセージの保存及び読み出しは、最初に保存されたものを最初に取り出すＦｉｒｓｔ−Ｉｎ  Ｆｉｒｓｔ−Ｏｕｔ（ＦＩＦＯ）で行う。
【００７７】
キュー部３１６−１、３１６−２は、当該キュー部３１６−１、３１６−２に保存されているメッセージのデータ量を示すキュー状態３２９をクレジット集中管理部３２１に送信する。
【００７８】
以下、キュー部３１６−１、３１６−２を区別しない場合、キュー部３１６と記載する。
【００７９】
送信部３１７−１、３１７−２は、メッセージ受信者３０４、３０５から受信した送信制御情報３１２、３１３に従って適切なキュー部３１６からメッセージ３２４、３２６を読み出し、読み出されたメッセージ３２４、３２６をヘッダ付メッセージ３１０、３１１としてメッセージ受信者３０４、３０５に送信する。以下、送信部３１７−１、３１７−２を区別しない場合、送信部３１７と記載する。
【００８０】
全体制御部３２２は、メッセージサーバ３０１全体の制御を行う。具体的には、全体制御部３２２は、メッセージサーバ３０１起動時の初期化処理、メッセージサーバ３０１終了時の処理、並びに、スレッド及びプロセスの管理等を行う。
【００８１】
クレジット集中管理部３２１は、優先度設定３１４、受信／配送部３１５から受信した配送状態３２８、及びキュー部３１６から受信したキュー状態３２９に基づいて、受信／配送部３１５に対して発行する発行クレジット３２７を決定する。決定された発行クレジット３２７は、クレジット管理情報１２５に格納される。
【００８２】
さらに、クレジット集中管理部３２１は、当該決定された発行クレジット３２７を各受信／配送部３１５に通知することによって複数のメッセージ伝達間の優先度を制御する。なお、優先度設定３１４は、外部から入力される情報である。
【００８３】
本実施形態では、クレジット集中管理部３２１が、入力された優先度設定３１４に基づいて、各受信／配送部３１５に発行する発行クレジット３２７を管理する。これによって、メッセージ送信者３０２からメッセージ受信者３０４へのメッセージ伝達と、メッセージ送信者３０３からメッセージ受信者３０５へのメッセージ伝達との間の優先度制御を行うことが可能となる。
【００８４】
なお、図２に示す例では、受信／配送部３１５、キュー部３１６、及び送信部３１７は、それぞれ二つずつあるが、本発明はこれに限定されない。全体制御部３２２が必要に応じて、受信／配送部３１５、キュー部３１６、及び送信部３１７を作成し、又は削除することができる。例えば、受信／配送部３１５が３個、キュー部３１６が５個、送信部３１７が２個という構成もとることが可能である。
【００８５】
なお、クレジット集中管理部３２１及び全体制御部３２２についてはメッセージサーバ２０１にそれぞれ１個ずつ含まれる。
【００８６】
以下、メッセージサーバ２０１を構成する、受信／配送部３１５、キュー部３１６、送信部３１７、クレジット集中管理部３２１及び全体制御部３２２の具体的な処理について詳述する。
【００８７】
図３は、本発明の第１の実施形態のメッセージサーバ３０１のソフトウェア構成を説明するブロック図である。
【００８８】
なお、図において、四角又は丸四角は、メッセージサーバ装置１０１上で実行されるプログラムによって実現される処理ブロックを表す。また、処理ブロック間の矢印は、矢印の方向に情報又は指示が伝えられることを示す。また、矢印に対するキャプション及び符号は処理ブロック間で伝えられる情報又は指示を表す。
【００８９】
図３は図２に示すメッセージサーバ３０１の内部構成をより詳しく図示したものであり、図３の各処理ブロックは、図２で同一名称の処理ブロックにそれぞれ対応する。
【００９０】
メッセージサーバ３０１では、まず、全体制御部３２２がメッセージサーバ３０１の初期化を行い、キュー部３１６を作成する。
【００９１】
全体制御部３２２は、メッセージ送信者３０２、３０３からメッセージサーバ３０１への接続を受け付けると受信／配送部３１５を作成し、メッセージ送信者３０２、３０３からの接続が終了すると受信／配送部３１５を削除する。
【００９２】
また、全体制御部３２２は、メッセージ受信者３０４、３０５からの接続を受け付けると、送信部３１７を作成し、メッセージ受信者３０４、３０５からの接続が終了すると送信部３１７を削除する。
【００９３】
すなわち、受信／配送部３１５、キュー部３１６及び送信部３１７は、それぞれ、０以上の任意の数だけ設定可能である。
【００９４】
なお、全体制御部３２２は、接続の度に受信／配送部３１５又は送信部３１７を作成するのではなく、以前作成した受信／配送部３１５又は送信部３１７を再利用することによって、処理時間を削減してもよい。
【００９５】
受信／配送部３１５は、データ受信部４１９、メッセージ抽出部４２０、配送管理部４２２、及び送信制御情報送信部４２１を含む。
【００９６】
データ受信部４１９は、メッセージ送信者３０２、３０３からヘッダ付メッセージ４０２を受信し、受信したヘッダ付メッセージ４０２をヘッダ付メッセージ４３０としてメッセージ抽出部４２０に送信する。
【００９７】
メッセージ抽出部４２０は、受信したヘッダ付メッセージ４３０からメッセージ４１２とヘッダ情報４３１とを抽出する。また、メッセージ抽出部４２０は、抽出されたヘッダ情報４３１を配送管理部４２２に送信する。また、メッセージ抽出部４２０は、配送管理部４２２によって決定されたキュー部３１６にメッセージ４１２を送信する。
【００９８】
メッセージ４１２の送信については、例えば、一つの受信／配送部３１５から複数のキュー部３１６に送信される場合、又は、複数の受信／配送部３１５から一つのキュー部３１６に送信される場合等が考えられる。
【００９９】
配送管理部４２２は、受信したヘッダ情報４３１に基づいて、メッセージを配送するキュー部３１６を決定し、決定されたキュー部３１６にエンキュー指示４１３を送信する。また、配送管理部４２２は、配送状態３２８をクレジット集中管理部３２１に送信する。
【０１００】
送信制御情報送信部４２１は、クレジット集中管理部３２１から送信された発行クレジット３２７を受信し、受信した発行クレジット３２７を含む送信制御情報４０３をメッセージ送信者３０２、３０３に送信する。
【０１０１】
なお、受信／配送部３１５の処理の詳細については、図４を用いて後述する。
【０１０２】
キュー部３１６は、キュー４２３及びキュー状態管理部４２４を含む。
【０１０３】
キュー４２３は、キュー状態管理部４２４からの操作指示４３２に従ってメッセージ４１２を保存し、また、メッセージ４１４読み出す。
【０１０４】
キュー状態管理部４２４は、受信／配送部３１５からのエンキュー指示４１３に基づいて、キュー４２３にメッセージ４１２の保存を操作指示４３２として指示し、また、送信部３１７からのデキュー指示４１５に基づいて、キュー４２３にメッセージ４１４の読み出しを操作指示４３２として指示する。
【０１０５】
なお、キュー部３１６の処理の詳細については、図６を用いて後述する。
【０１０６】
送信部３１７は、データ送信部４２５及び送信制御情報受信部４２６を含む。
【０１０７】
データ送信部４２５は、キュー部３１６からメッセージ４１４を読み出し、送信制御情報受信部４２６から受信した送信指示４３３に基づいて、読み出されたメッセージ４１４にヘッダ情報が付加されたヘッダ付メッセージ４０４をメッセージ受信者３０４、３０５に送信する。
【０１０８】
送信制御情報受信部４２６は、メッセージ受信者３０４、３０５から受信した送信制御情報４０５に基づいて、デキュー指示４１５をキュー部３１６に送信し、また、送信指示４３３をデータ送信部４２５に送信する。
【０１０９】
なお、送信部３１７の処理の詳細については、図５を用いて後述する。
【０１１０】
クレジット集中管理部３２１は、優先度管理部４２７、クレジット制御部４２８、及びサーバ状態検出部４２９を含む。
【０１１１】
優先度管理部４２７は、外部から優先度設定３１４を受信し、受信した優先度設定３１４を優先度情報４３４としてクレジット制御部４２８に送信する。
【０１１２】
サーバ状態検出部４２９は、メッセージサーバ装置１０１の状態を取得し、サーバ状態情報４３５としてクレジット制御部４２８に送信する。
【０１１３】
クレジット制御部４２８は、配送状態３２８、キュー状態３２９、優先度情報４３４、及びサーバ状態情報４３５に基づいて、発行クレジット３２７を決定し、決定された発行クレジット３２７を受信／配送部３１５に送信する。
【０１１４】
なお、クレジット集中管理部３２１の処理の詳細については、図７を用いて後述する。
【０１１５】
以下、メッセージ送信者３０２、３０３からメッセージ受信者３０４、３０５へのメッセージの伝達を例に、各構成の処理の詳細を説明する。
【０１１６】
図４は、本発明の第１の実施形態のメッセージサーバ３０１における受信／配送部３１５の処理を説明するフローチャートである。
【０１１７】
開始状態５０１から処理が開始されると、まず、受信／配送部３１５は、クレジット集中管理部３２１から発行クレジット３２７が通知されたか否かを判定する（ステップ５０２）。具体的には、送信制御情報送信部４２１が、クレジット制御部４２８から発行クレジット３２７を受信したか否かを判定する。
【０１１８】
クレジット制御部４２８から発行クレジット３２７が通知されていないと判定された場合、受信／配送部３１５は、ステップ５０４に進む。
【０１１９】
クレジット制御部４２８から発行クレジット３２７が通知されたと判定された場合、受信／配送部３１５は、受信した発行クレジット３２７を含む送信制御情報４０３をメッセージ送信者３０２、３０３に送信する（ステップ５０３）。具体的には、送信制御情報送信部４２１が送信制御情報４０３を送信する。
【０１２０】
受信／配送部３１５から送信制御情報４０３を受信したメッセージ送信者３０２、３０３は、送信制御情報４０３に含まれる発行クレジット３２７に示されたデータ量の範囲内で、メッセージのあて先等のヘッダ情報が付加されたヘッダ付メッセージ４０２を受信／配送部３１５のデータ受信部４１９に送信する。
【０１２１】
また、メッセージ送信者３０２、３０３は、メッセージを送信する際に受信した発行クレジット３２７から送信するメッセージの容量に対応するクレジット量を減算する。メッセージ送信者３０２、３０３は、当該クレジットの減算結果が「０」未満となる場合、メッセージの送信を停止する。すなわち、受信／配送部３１５は、発行クレジット３２７を用いてメッセージ送信者３０２、３０３から送信されるメッセージの容量を制御する。
【０１２２】
次に、受信／配送部３１５は、ヘッダ付メッセージ４０２を受信したか否かを判定する（ステップ５０４）。具体的には、データ受信部４１９が、ヘッダ付メッセージ４０２を受信したか否かを判定する。
【０１２３】
ヘッダ付メッセージ４０２を受信していないと判定された場合、受信／配送部３１５は、終了状態５１０に移り処理を終了する。
【０１２４】
ヘッダ付メッセージ４０２を受信したと判定された場合、受信／配送部３１５は、ヘッダ付メッセージ４０２をヘッダ付メッセージ４３０として受信し、当該ヘッダ付メッセージ４３０からメッセージ４１２とヘッダ情報４３１とを抽出する（ステップ５０５）。具体的には、メッセージ抽出部４２０が、データ受信部４１９から受信したヘッダ付メッセージ４０２をヘッダ付メッセージ４３０として取得し、当該ヘッダ付メッセージ４３０からメッセージ４１２とヘッダ情報４３１とを抽出する。
【０１２５】
次に、受信／配送部３１５は、メッセージ４１２を配送するキュー部３１６を決定する（ステップ５０６）。具体的には、配送管理部４２２が、メッセージ抽出部４２０によって抽出されたヘッダ情報４３１に基づいてメッセージ４１２を配送するキュー部３１６を決定する。
【０１２６】
受信／配送部３１５は、決定されたキュー部３１６にエンキュー指示４１３を送信し、エンキューに成功したか否かを判定する（ステップ５０７）。具体的には、配送管理部４２２が、ステップ５０６において決定された配送先のキュー部３１６のキュー状態管理部４２４に対してエンキュー指示４１３を送信し、エンキューに成功したか否かを判定する。例えば、キュー状態管理部４２４からエンキュー成功の応答が返ってきた場合に、配送管理部４２２はエンキューに成功したと判定する。
【０１２７】
エンキューに失敗したと判定された場合、受信／配送部３１５は、メッセージ送信者３０２、３０３にエラーを返し、その後終了状態５１０へと移り処理を終了する。
【０１２８】
エンキューに成功したと判定された場合、受信／配送部３１５は、決定されたキュー部３１６にメッセージ４１２を書き込むことによって保存する（ステップ５０８）。具体的には、メッセージ抽出部４２０が、決定された配送先のキュー部３１６のキュー４２３に抽出されたメッセージ４１２を保存する。
【０１２９】
次に、受信／配送部３１５は、配送状態３２８をクレジット集中管理部３２１に送信し（ステップ５０９）、その後終了状態５１０へと移り処理を終了する。具体的には、配送管理部４２２が、抽出されたヘッダ情報４３１に含まれる配送先、メッセージサイズ等の情報及び時刻から配送状態３２８を作成し、作成された配送状態３２８をクレジット集中管理部３２１のクレジット制御部４２８に通知する。
【０１３０】
なお、配送状態３２８を用いた処理の具体的な内容については、クレジット制御部４２８の処理の説明にて詳細を述べる。
【０１３１】
受信／配送部３１５は、メッセージ送信者３０２、３０３からの接続が切断されるまで前述した処理を繰り返し実行する。
【０１３２】
図５は、本発明の第１の実施形態のメッセージサーバ３０１における送信部３１７の処理を説明するフローチャートである。
【０１３３】
開始状態６０１から処理が開始されると、送信部３１７は、まず、メッセージ受信者３０４、３０５から通知クレジットを含む送信制御情報４０５を受信したか否かを判定する（ステップ６０２）。具体的には、送信制御情報受信部４２６が、メッセージ受信者３０４、３０５から通知クレジットを含む送信制御情報４０５を受信したか否かを判定する。
【０１３４】
なお、送信制御情報４０５に含まれる通知クレジットは、メッセージ受信者３０４、３０５がそれぞれ決定したクレジットである。
【０１３５】
メッセージ受信者３０４、３０５から通知クレジットを含む送信制御情報４０５を受信していないと判定された場合、送信部３１７は、ステップ６０４に進む。
【０１３６】
メッセージ受信者３０４、３０５から通知クレジットを含む送信制御情報４０５を受信したと判定された場合、送信部３１７は、受信した送信制御情報４０５に基づいてクレジットを更新する（ステップ６０３）。具体的には、送信制御情報受信部４２６が、受信した送信制御情報４０５に含まれる通知クレジットを送信制御クレジットとして保存する。
【０１３７】
送信部３１７は、送信制御クレジットに基づいて、メッセージが送信可能であるか否かを判定する（ステップ６０４）。具体的には、送信制御情報受信部４２６が、送信制御クレジットを参照して、送信制御クレジットに対応する容量と送信しようとしているメッセージのデータ量とを比較し、メッセージのデータ量の方が大きければメッセージを送信できないと判定し、そうでなければ送信できると判定する。
【０１３８】
なお、メッセージのデータ量が送信制御クレジットに対応する容量を超えていた場合、メッセージを送信できないと判定するのではなく、送信制御クレジットに対応する容量の範囲内でメッセージの一部を分割して送信するという処理にしてもよい。また、送信制御クレジットが保存されていない場合、送信制御情報受信部４２６は、送信制御クレジットを「０」として前述の判定を行う。
【０１３９】
メッセージが送信できないと判定された場合、送信部３１７は、終了状態６１０へと移り処理を終了する。
【０１４０】
メッセージが送信可能であると判定された場合、送信部３１７は、デキュー指示をキュー部３１６に送信する（ステップ６０５）。具体的には、送信制御情報受信部４２６は、受信した送信制御情報４０５に基づいて決定されたキュー部３１６のキュー状態管理部４２４にデキュー指示４１５を送信する。
【０１４１】
なお、決定されたキュー部３１６は、メッセージ受信者３０４、３０５からメッセージサーバ３０１への接続時に全体制御部３２２が決定してもよい。
【０１４２】
次に、送信部３１７は、デキューに成功したか否かを判定する（ステップ６０６）。具体的には、送信制御情報受信部４２６が送信したデキュー指示４１５に対するキュー部３１６の応答に基づいてデキューに成功したか否かを判定する。
【０１４３】
例えば、キュー４２３にメッセージが保存されていない場合にはキュー部３１６はデキューに失敗したと応答する。
【０１４４】
デキューに失敗したと判定された場合、送信部３１７は、終了状態６１０へと移り処理を終了する。
【０１４５】
デキューに成功したと判定された場合、送信部３１７は、キュー部３１６からメッセージ４１４を読み出す（ステップ６０７）。具体的には、送信制御情報受信部４２６が送信指示４３３をデータ送信部４２５に送信し、当該送信指示４３３を受信したデータ送信部４２５がキュー部３１６のキュー４２３からメッセージ４１４を読み出す。
【０１４６】
次に、送信部３１７は、読み出されたメッセージ４１４にヘッダを付与する（ステップ６０８）。具体的には、データ送信部４２５が、読み出されたメッセージ４１４にメッセージサイズなどのヘッダ情報を付加し、メッセージ受信者３０４、３０５が受信可能な形式に変更する。
【０１４７】
送信部３１７は、ヘッダ情報が付加されたヘッダ付メッセージ４０４をメッセージ受信者３０４、３０５に送信し（ステップ６０９）、その後終了状態６１０へと移り処理を終了する。具体的には、データ送信部４２５が、ヘッダ情報が付加されたメッセージ４１４をヘッダ付メッセージ４０４としてメッセージ受信者３０４、３０５に送信する。さらに、送信制御情報受信部４２６が送信制御クレジットに対応する容量を減らし、次回使用される送信制御クレジットとして保存する。
【０１４８】
送信部３１７は、メッセージ受信者３０４、３０５から接続が切断されるまで前述した処理を繰り返し実行する。
【０１４９】
図６は、本発明の第１の実施形態のメッセージサーバ３０１におけるキュー部３１６の処理を説明するフローチャートである。
【０１５０】
開始状態７０１から処理が開始されると、キュー部３１６は、受信／配送部３１５からエンキュー指示４１３を受信したか否かを判定する（ステップ７０２）。具体的には、キュー状態管理部４２４が、受信／配送部３１５の配送管理部４２２からエンキュー指示４１３を受信したか否かを判定する。
【０１５１】
エンキュー指示４１３を受信していないと判定された場合、キュー部３１６は、ステップ７０４に進む。
【０１５２】
エンキュー指示４１３を受信したと判定された場合、キュー部３１６は、受信したエンキュー指示４１３に従ってエンキュー操作を実行する（ステップ７０３）。具体的には、キュー状態管理部４２４がエンキューについての操作指示４３２をキュー４２３に送信し、当該操作指示４３２を受信したキュー４２３が受信／配送部３１５のメッセージ抽出部４２０によって抽出されたメッセージ４１２を保存する。
【０１５３】
なお、使用可能なメモリが足りないなど、エンキューに失敗した場合、キュー状態管理部４２４がエンキュー指示４１３に対してエラーを返し、キュー４２３にはメッセージ４１２は保存されない。
【０１５４】
次に、キュー部３１６は、送信部３１７からデキュー指示４１５を受信したか否かを判定する（ステップ７０４）。具体的には、キュー状態管理部４２４が、送信部３１７の送信制御情報受信部４２６からデキュー指示４１５を受信したか否かを判定する。
【０１５５】
デキュー指示４１５を受信していないと判定された場合、キュー部３１６は、ステップ７０６に進む。
【０１５６】
デキュー指示４１５を受信したと判定された場合、キュー部３１６は、受信したデキュー指示４１５に従ってデキュー操作を実行する（ステップ７０５）。具体的には、キュー状態管理部４２４が、デキューについての操作指示４３２をキュー４２３に送信し、当該操作指示４３２を受信したキュー４２３が保存しているメッセージ４１２を読み出し、メッセージ４１４として送信部３１７のデータ送信部４２５に送信する。
【０１５７】
なお、キュー４２３が空であったり、デキュー指示４１５に含まれる最大読み出し可能量を超えたメッセージしか読み出せなかったりした等、デキューに失敗した場合、キュー状態管理部４２４がデキュー指示４１５に対してエラーを返して、キュー４２３からメッセージ４１４は読み出されない。
【０１５８】
キュー部３１６は、キュー状態３２９をクレジット集中管理部３２１に通知し（ステップ７０６）、その後終了状態７０７へと移り処理を終了する。具体的には、キュー４２３の状態を参照してキュー状態３２９を取得し、取得されたキュー状態３２９をクレジット集中管理部３２１のクレジット制御部４２８に送信する。
【０１５９】
なお、キュー状態３２９を用いた処理の具体的な内容については、クレジット制御部４２８の処理の説明にて詳細を述べる。
【０１６０】
キュー部３１６は、前述した処理を繰り返し実行する。
【０１６１】
なお、キュー４２３に保存されたメッセージ４１２を読み出す順序はＦＩＦＯでなくてもよい。例えば、最初に保存された任意のメッセージ送信者から送信されたメッセージよりも、後から保存された別のメッセージ送信者から送信されたメッセージを先に読み出すことによって、後のメッセージ送信者を優先的に扱うことが可能となる。
【０１６２】
図７は、本発明の第１の実施形態のメッセージサーバ３０１におけるクレジット集中管理部３２１の処理を説明するフローチャートである。
【０１６３】
開始状態８０１から処理が開始されると、クレジット集中管理部３２１は、優先度設定３１４を受け付ける（ステップ８０２）。具体的には、優先度管理部４２７がメッセージサーバ３０１の管理者から優先度設定３１４を受け付ける。
【０１６４】
優先度管理部４２７が優先度設定３１４を受け付けた場合、優先度設定情報として保存される。優先度管理部４２７が優先度設定３１４を受け付けていない場合、クレジット集中管理部３２１は、ステップ８０３に進む。
【０１６５】
なお、優先度設定４０６の具体的な内容については、クレジット制御部４２８における処理の説明にて詳細を述べる。
【０１６６】
次に、クレジット集中管理部３２１は、サーバ状態を検出する（ステップ８０３）。具体的には、サーバ状態検出部４２９がメモリの使用量又はＣＰＵ１０５の使用率などのメッセージサーバ装置１０１の状態情報を検出する。例えば、サーバ状態検出部４２９が、メッセージサーバ装置１０１上で実行されるオペレーティングシステム（図示省略）に問い合わせることによって、メッセージサーバ装置１０１の状態情報を取得することができる。
【０１６７】
クレジット集中管理部３２１は、優先度情報４３４を参照する（ステップ８０４）。具体的には、クレジット制御部４２８が、優先度管理部４２７に保存される優先度設定情報を優先度情報４３４として参照する。
【０１６８】
クレジット集中管理部３２１は、サーバ状態情報４３５を参照する（ステップ８０５）。具体的には、クレジット制御部４２８が、サーバ状態検出部４２９によって検出されたサーバ状態情報をサーバ状態情報４３５として参照する。
【０１６９】
クレジット集中管理部３２１は、配送状態３２８を参照する（ステップ８０６）。具体的には、クレジット制御部４２８が、受信／配送部３１５の配送管理部４２２から送信された配送状態３２８を参照する。
【０１７０】
クレジット集中管理部３２１は、キュー状態３２９を参照する（ステップ８０７）。具体的には、クレジット制御部４２８が、キュー部３１６のキュー状態管理部４２４から送信されたキュー状態３２９を参照する。
【０１７１】
クレジット集中管理部３２１は、参照した各情報に基づいて発行クレジット３２７を算出し、クレジット管理情報１２５に格納する（ステップ８０８）。具体的には、クレジット制御部４２８が、優先度情報４３４、サーバ状態情報４３５、配送状態３２８及びキュー状態３２９を用いて、各受信／配送部３１５に通知する発行クレジット３２７を算出し、算出された発行クレジット３２７をクレジット管理情報１２５に格納する。なお、発行クレジット３２７の算出方法については、図８を用いて後述する。
【０１７２】
なお、ステップ８０８において算出される発行クレジット３２７は、メッセージ送信者３０２からメッセージ受信者３０４へのメッセージ伝達と、メッセージ送信者３０３から３０５へのメッセージ伝達の間の優先度を考慮して決定されたものである。
【０１７３】
クレジット集中管理部３２１は、各受信／配送部３１５に発行クレジット３２７を送信し（ステップ８０９）、その後終了状態８１０へと移り処理を終了する。具体的には、クレジット制御部４２８が、クレジット管理情報１２５を参照して、各受信／配送部３１５に対応する発行クレジット３２７を送信制御情報送信部４２１に送信する。
【０１７４】
クレジット集中管理部３２１は、前述した処理を繰り返し実行する。
【０１７５】
本実施形態の全体制御部３２２は、サーバプログラムにおけるメインスレッドの動作を行うものであり、メッセージサーバ３０１起動時の初期化処理、メッセージサーバ３０１終了時の処理、メッセージサーバ３０１の設定の管理、メッセージ送信者又はメッセージ受信者との各接続の開始及び終了処理、受信／配送部３１５、キュー部３１６及び送信部３１７の作成及び削除、並びに、スレッド及びプロセスの管理等を行う。
【０１７６】
以上、メッセージサーバ３０１が含む、受信／配送部３１５、送信部３１７、キュー部３１６、クレジット集中管理部３２１、及び全体制御部３２２のそれぞれの処理について説明した。
【０１７７】
なお、ステップ８０２及びステップ８０３の処理は、順番を入れ替えて実行されてもよい。また、ステップ８０４〜ステップ８０７の処理についても、いずれの処理から実行してもよい。
【０１７８】
なお、受信／配送部３１５、キュー部３１６、送信部３１７、全体制御部３２２及びクレジット集中管理部３２１の各部は、それぞれ、所定の間隔で繰り返し処理を実行する。
【０１７９】
各処理の実行間隔は、予め設定された一定間隔でもよいし、メッセージサーバ装置１０１の処理負荷が高い場合に処理の実行間隔を長くするなど処理負荷に応じて動的に変更してもよいし、接続の受け付け、キュー状態の変更、又はサーバ状態の変更等の何らかのイベントを基準にしてもよい。
【０１８０】
各処理の実行間隔を変更することによって、低消費電力化及び処理の高速応答が実現できる。
【０１８１】
また、処理ブロック間における情報又は指示の送受信については、必ずしもネットワークを介した通信に限定したものではなく、例えば、プロセス間通信、ウィンドウメッセージ若しくはシグナルによる通知、オブジェクトのメソッド呼び出し、又は、グローバル変数若しくは共有メモリ、ファイルへの書き込みと読み出し等、他の方法を用いてもよい。
【０１８２】
例えば、送信者が共有メモリへの書き込み、受信者が共有メモリから書き込まれた情報を読み出して情報を伝えることによって、情報又は指示の送信者と受信者とが独立して動作できるため、応答待機時間を削減し処理速度を高速化できる。
【０１８３】
以下、クレジット集中管理部３２１のクレジット制御部４２８における処理、すなわちステップ８０８における処理について、フローチャートを用いて具体的に説明する。
【０１８４】
図８は、本発明の第１の実施形態のメッセージサーバ３０１におけるクレジット集中管理部３２１が実行する発行クレジット算出処理を説明するフローチャートである。
【０１８５】
図７に示したように、ステップ８０８では、クレジット制御部４２８が、優先度情報４３４、サーバ状態情報４３５、配送状態３２８及びキュー状態３２９を用いて、発行クレジット３２７を決定（算出）する。
【０１８６】
本実施形態では、優先度情報４３４には、（ａ）全接続において使用できるネットワーク帯域（以下、全ネットワーク帯域とも記載する。）、（ｂ）ネットワーク帯域に余裕がない場合に各接続が使用できる帯域の比（以下、各接続の帯域比とも記載する。）、及び（ｃ）ＣＰＵ使用率の上限が含まれる。
【０１８７】
また、サーバ状態情報４３５には、（ｄ）ＣＰＵ使用率が含まれる。また、配送状態３２８には、（ｅ）各接続の前回発行された発行クレジット３２７の消費量（以下、各接続のクレジット消費量とも記載する。）が含まれる。また、キュー状態３２９には、（ｆ）各キューの空き容量（以下、キューの受信可能量とも記載する。）が含まれる。
【０１８８】
クレジット制御部４２８は、前述した（ａ）〜（ｆ）を用いて、（ｇ）発行クレジット３２７を算出する。
【０１８９】
なお、（ａ）〜（ｇ）における単位は、通常、（ａ）が「ビット／秒」、（ｂ）が数値の比、（ｃ）が「％」、（ｄ）が「％」、（ｅ）が「クレジット」、（ｆ）が「バイト」、（ｇ）が「クレジット」であるが、説明をわかりやすくするため、本実施形態では（ａ）の単位を「バイト／秒」、（ｅ）及び（ｇ）の単位を「バイト」とする。
【０１９０】
また、発行クレジット３２７が発行される間隔は１秒とする。すなわち、メッセージ送信者に対して発行クレジット３２７が、１０クレジット発行された場合、１秒以内にメッセージ送信者が全て消費したときには１０バイト／秒のネットワーク帯域が使われたことになる。また、キューの空き容量が５バイトでデキューがない場合、当該キューを使用するメッセージ送信者に対して、５より多い発行クレジット３２７が配布され、メッセージ送信者が発行クレジット３２７に相当する容量のメッセージを送信したときにはキューがあふれることになる。
【０１９１】
以下の説明では、前述した単位の変換については説明を省略する。なお、優先度情報４３４において対象となる各接続の識別には、接続してきたメッセージ送信者におけるＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）アドレスに代表される識別情報、あて先となるキュー情報、メッセージ受信者の識別情報、又は、これらの組み合わせのいずれかが用いられる。
【０１９２】
例えば、メッセージ送信者のＩＰアドレスを識別情報として用いて、メッセージ送信者毎の優先度を設定してもよいし、メッセージ送信者のＩＰアドレスとあて先となるメッセージ受信者との組み合わせを識別情報として用いて、メッセージを伝達する経路毎に優先度を設定してもよい。
【０１９３】
なお、以下の説明において「各接続の変数」という表現を用いた場合は、各接続について１個ずつ変数が用意されており、それぞれ異なる値を保持できる。
【０１９４】
また、変数名が２回以上出現する場合には、初回以外では「変数」という記述を省略する場合があり、また変数名に対する参照は変数の保持している値に対する参照を表す。
【０１９５】
まず、開始状態９０１から処理が開始されると、クレジット制御部４２８は、total_creditを初期化する（ステップ９０２）。具体的には、クレジット制御部４２８は、優先度情報４３４に含まれる（ａ）を変数total_creditに代入する。
【０１９６】
クレジット制御部４２８は、各接続のnext_creditを初期化する（ステップ９０３）。具体的には、クレジット制御部４２８は、優先度情報４３４に含まれる（ｂ）を用いてtotal_creditを各接続に比例配分し、比例配分されたネットワーク帯域を各接続の変数next_creditに代入する。
【０１９７】
クレジット制御部４２８は、各接続のused_creditを初期化する（ステップ９０４）。具体的には、クレジット制御部４２８は、配送状態３２８に含まれる（ｅ）の情報を用いて、各接続において前回発行クレジット３２７が発行されて以降、１秒間に消費された発行クレジット３２７を各接続の変数used_creditに代入する。
【０１９８】
クレジット制御部４２８は、total_used_creditを算出する（ステップ９０５）。具体的には、クレジット制御部４２８は、各接続のused_creditの合計を算出し、当該算出された値を変数total_used_creditに代入する。
【０１９９】
クレジット制御部４２８は、total_used_creditがtotal_creditより大きいか否かを判定する（ステップ９０６）。具体的には、クレジット制御部４２８は、ステップ９０２からステップ９０５において設定された各変数に基づいて、total_used_creditとtotal_creditとを比較し、total_used_creditがtotal_creditより大きいか否かを判定する。
【０２００】
total_used_creditがtotal_creditより大きいと判定された場合、クレジット制御部４２８は、各接続のnext_creditを削減し、新たにnext_creditを再設定する（ステップ９０７）。具体的には、クレジット制御部４２８は、各接続において、( next_credit * (2 - total_used_credit / total_credit ))を計算することによって算出された値を、変数next_creditに代入する。なお、total_creditが「０」である場合、next_creditには「０」が設定される。その後、クレジット制御部４２８は、ステップ９１１に進む。
【０２０１】
total_used_creditがtotal_credit以下と判定された場合、クレジット制御部４２８は、total_unused_creditを初期化する（ステップ９０８）。具体的には、以下のような処理が実行される。
【０２０２】
まず、クレジット制御部４２８は、変数total_unused_creditに「０」を代入し、各接続において(next_credit - used_credit)を算出し、当該算出結果が正の場合のみtotal_unused_creditに(next_credit - used_credit)を加算する。すなわち、クレジット制御部４２８は、全接続において、(next_credit - used_credit)が正である接続の(next_credit - used_credit)の値のみを合計し、当該合計値を変数total_unused_creditに代入する。
【０２０３】
次に、クレジット制御部４２８は、total_creditに基づいて、total_unused_creditを再設定する（ステップ９０９）。具体的には、クレジット制御部４２８は、total_unused_creditがtotal_creditより大きいか否かを判定し、total_unused_creditがtotal_creditより大きい場合には、total_unused_creditにtotal_creditを代入する。
【０２０４】
クレジット制御部４２８は、各接続のnext_creditを増加させるように再設定する（ステップ９１０）。具体的には、クレジット制御部４２８は、(total_credit + total_unused_credit)を算出し、優先度情報４３４に含まれる（ｂ）を用いて、当該算出結果を各接続に比例配分し、比例配分された値を各接続の変数next_creditに代入する。その後、クレジット制御部４２８は、ステップ９１１に進む。
【０２０５】
クレジット制御部４２８は、各接続のmax_creditを算出する（ステップ９１１）。具体的には、クレジット制御部４２８は、キュー状態３２９に含まれる（ｆ）を用いて、各接続において、キューが受信できる容量である発行クレジット３２７を算出し、当該算出された値を各接続の変数max_creditに代入する。
【０２０６】
前述した発行クレジット３２７の算出において、全キューの（ｆ）の最小値が全ての接続に対して共通のmax_creditとして用いられる。また、各接続とキューとの対応が分かっている場合には、各接続において対応するキューの（ｆ）の最小値が、各接続のmax_creditとして用いられる。
【０２０７】
クレジット制御部４２８は、ステップ９１１において算出されたmax_creditに基づいて、next_creditを再設定する（ステップ９１２）。具体的には、クレジット制御部４２８は、各接続において、next_creditがmax_creditより大きいか否かを判定し、next_creditがmax_creditより大きい場合、next_creditにmax_creditを代入する。
【０２０８】
次に、クレジット制御部４２８は、prev_total_creditを設定する（ステップ９１３）。具体的には、クレジット制御部４２８は、前回実行されたクレジット計算処理８０８によって設定された変数last_total_creditの値を、変数previous_total_creditに代入する。なお、last_total_creditが未設定の場合、クレジット制御部４２８は、previous_total_creditに「０」を設定する。
【０２０９】
クレジット制御部４２８は、total_creditを再計算する（ステップ９１４）。具体的には、クレジット制御部４２８は、全接続のnext_creditを合計し、当該合計結果をtotal_creditに代入する。
【０２１０】
クレジット制御部４２８は、used_cpuを設定する（ステップ９１５）。具体的には、クレジット制御部４２８は、サーバ状態情報４３５に含まれる（ｄ）を用いて、サーバのＣＰＵ使用率を変数used_cpuに代入する。
【０２１１】
次に、クレジット制御部４２８は、predicted_cpuを算出する（ステップ９１６）。具体的には、クレジット制御部４２８は、(used_cpu * total_credit / previous_total_credit)を算出し、当該算出結果を変数predicted_cpuに代入する。なお、previous_total_creditが「０」の場合、クレジット制御部４２８は、used_cpuをpredicted_cpuに代入する。
【０２１２】
クレジット制御部４２８は、total_cpuを設定する（ステップ９１７）。具体的には、クレジット制御部４２８は、優先度情報４３４に含まれる（ｃ）を用いて、メッセージサーバ３０１によって使用されるＣＰＵ使用率の上限を変数total_cpuに代入する。
【０２１３】
クレジット制御部４２８は、predicted_cpuとtotal_cpuとを比較し、predicted_cpuがtotal_cpuより大きいか否かを判定する（ステップ９１８）。
【０２１４】
predicted_cpuがtotal_cpu以下と判定された場合、クレジット制御部４２８は、ステップ９２１に進む。
【０２１５】
predicted_cpuがtotal_cpuより大きいと判定された場合、クレジット制御部４２８は、predicted_cpuに基づいて各接続のnext_creditを再設定する（ステップ９１９）。具体的には、クレジット制御部４２８は、各接続において( next_credit * total_cpu / predicted_cpu )を算出し、当該算出結果をnext_creditに代入する。なお、predicted_cpuが「０」の場合、クレジット制御部４２８は、next_creditに算出結果を代入しない。
【０２１６】
クレジット制御部４２８は、total_creditを再度算出する（ステップ９２０）。具体的には、クレジット制御部４２８は、全接続のnext_creditを合計し、当該合計結果をtotal_creditに代入する。
【０２１７】
クレジット制御部４２８は、次回実行される発行クレジット算出処理（ステップ８０８）において使用するための変数last_total_creditを設定する（ステップ９２１）。具体的には、クレジット制御部４２８は、変数last_total_creditにtotal_creditを代入する。
【０２１８】
クレジット制御部４２８は、以上の手順によって算出された、各接続のnext_creditを対応する受信／配送部３１５の送信制御情報送信部４２１に対して通知する発行クレジット３２７として使用し（ステップ９２２）、その後終了状態９２３へと移り処理を終了する。
【０２１９】
本実施形態では、ステップ９０３において、（ｂ）各接続の帯域比に基づいて、（ａ）全ネットワーク帯域を発行クレジット３２７として比例配分する。
【０２２０】
さらに、ステップ９０６〜ステップ９１０において（ｅ）各接続のクレジット消費量と（ａ）全ネットワーク帯域に対応するクレジット量とを比較して、（ｅ）各接続のクレジット消費量が（ａ）全ネットワーク帯域に対応するクレジット量より大きい場合、すなわち、比例配分された発行クレジット３２７が余っている場合、当該余剰した発行クレジット３２７を追加で各接続に対して分配する。発行クレジット３２７の分配はネットワーク帯域の分配に対応するため、前述の追加の分配によって、余剰帯域を有効活用できる。
【０２２１】
ステップ９０９では、追加で分配されるクレジット量の最大値が制限される。
【０２２２】
ステップ９０７では、各接続のクレジット消費量の合計が（ａ）全ネットワーク帯域に対応するクレジット量を超えていた場合に、次回の発行クレジット３２７の発行量を最大で「０」まで制限しているため、２回の発行クレジット３２７発行における平均ネットワーク帯域が（ａ）全ネットワーク帯域を超えないようにしている。
【０２２３】
ステップ９１１〜９１２では、（ｆ）キューの受信可能量にクレジット配布量を制限することによってキューがあふれることがないようにしている。
【０２２４】
ステップ９１３〜９２１では、（ｄ）ＣＰＵ使用率に基づいてクレジット量を制限し、メッセージサーバ３０１の処理能力を超えないようにメッセージの流入量を制限している。
【０２２５】
以上のように、図８に示した処理によって発行クレジット３２７を制御することができるため、各接続に優先度を設定できる。従って、ネットワーク帯域を有効活用でき、また、メッセージサーバ３０１は負荷が集中することなく、安定して処理を実行することができる。
【０２２６】
なお、ステップ９１１において、各メッセージ送信者との接続及びキューの対応関係は動的に変化する。そのため、あるキューに対して高い負荷をかけるメッセージ送信者との接続と、ほとんど負荷をかけないメッセージ送信者との接続との間において、キューの受信可能容量を変えてもよい。
【０２２７】
例えば、キューに対する負荷が高い接続には、キューの受信可能容量を低めに扱い、発行クレジット３２７の発行量を低めに制限することによって、当該キューがあふれる頻度を低くできる。
【０２２８】
なお、負荷の見積もりには履歴に基づく統計値の他、ニューラルネットワーク又は隠れマルコフモデル等による学習を用いて見積もりの精度を高めてもよい。
【０２２９】
また、本実施形態では、ステップ９０９において、total_unused_creditを最大でtotal_creditに制限することによって、ステップ９１０において、再分配対象のクレジットである(total_credit + total_unused_credit)の算出結果がtotal_creditの２倍以下になるようにするため、ステップ９０７において用いられた計算式に「２」という定数を用いた。しかし、本発明はこれに限定されず、様々な計算式を用いることができる。
【０２３０】
従って、ステップ９０７において用いられる計算式に変更を加えてステップ９０９における制限を増やすことによって、再分配対象の発行クレジット２２０３（図２１参照）を増やしてもよい。これによって全接続で使用したネットワーク帯域の合計値の一時的な最大値が増加する一方、余剰ネットワーク帯域をより有効に使用できる。
【０２３１】
本実施形態では、優先度情報４３４に含まれる（ａ）全ネットワーク帯域、（ｂ）各接続の帯域比、及び（ｃ）ＣＰＵ使用率の上限、サーバ状態情報４３５に含まれる（ｄ）ＣＰＵ使用率、配送状態３２８に含まれる（ｅ）各接続のクレジット消費量、並びに、キュー状態３２９に含まれる（ｆ）各キューの空き容量を用いたが、これらの情報は一例であって、本発明はこれに限定されない。
【０２３２】
例えば、ＣＰＵ使用率の代わりに（ｃ）メモリ使用率上限、（ｄ）メモリ使用率又はメモリ使用率の変化量を用いれば、メッセージサーバ３０１によって使用されるメモリ量を制限できる。
【０２３３】
また、（ｂ）各接続の帯域比に加えて各接続が使用できる最小保証帯域を指定して、全接続の最小保証帯域の合計値をステップ９０２においてtotal_creditから減算し、ステップ９２２の前で、各接続においてnext_creditに最小保証帯域を加算してnext_creditに代入するという処理を追加すれば最小帯域の保証が可能である。
【０２３４】
また、（ｂ）各接続の帯域比に加えて各接続が使用できる最大帯域を指定してステップ９１１〜９１２と同じような制限を加える処理を追加することによって最大帯域を制限でき、さらに、最小保証帯域指定と組み合わせることで一部の接続に固定的に帯域を割り当てることが可能となる。また、固定ではなく、優先度設定３１４を変更することによって、前述した設定を動的に変更することもできる。
【０２３５】
なお、優先度設定３１４の設定方法は、予めプログラム作成時に埋め込む方法、メッセージサーバ３０１起動時に設定する方法、設定ファイル若しくはメモリ上に記述し、メッセージサーバ３０１が参照する方法、ネットワークを介してメッセージサーバ３０１が参照する方法、ネットワークを介してメッセージ送信者、メッセージ受信者、メッセージサーバ３０１の管理者、システム全体、各装置の管理者、若しくは第三者からの指定によって設定する方法、又は、キーボード若しくはマウスなどメッセージサーバ装置１０１における入出力装置１０７を介して設定する方法などが考えられる。
【０２３６】
本実施形態では、メッセージサーバ３０１は、指定された間隔（図８に示す例では１秒毎）で、各メッセージ送信者に発行する発行クレジット３２７を算出し、算出された発行クレジット３２７を各メッセージ送信者に通知しているが、本発明はこれに限定されない。
【０２３７】
例えば、メッセージサーバ３０１が、発行される発行クレジット３２７のクレジット量を固定して、発行クレジット３２７を通知する間隔を算出し、算出された間隔で固定量の発行クレジット３２７を各メッセージ送信者に通知してもよい。
【０２３８】
例えば、メッセージ送信者Ａ及びメッセージ送信者Ｂとの接続に対して、１秒おきにステップ８０８における処理が実行されている状況であるとする。また、計算結果を用いて、１秒という固定の間隔で、メッセージ送信者Ａに２、メッセージ送信者Ｂに５という量の発行クレジット３２７を発行して通知しているとする。すなわち、メッセージ送信者Ａに１秒あたり２、メッセージ送信者Ｂに１秒あたり５の発行クレジット３２７を通知しているとする。
【０２３９】
前述のような場合において、発行クレジット３２７の通知間隔を固定でするのではなく、メッセージ送信者Ａに対しては１０秒、メッセージ送信者Ｂに対しては４秒と接続ごとに変更し、当該間隔で２０という固定量の発行クレジット３２７を各メッセージ送信者に通知すると、発行クレジット３２７の通知間隔を固定して通知するクレジット量を変えた場合と同様に、メッセージ送信者Ａに１秒あたり２、メッセージ送信者Ｂに１秒あたり５のクレジットを通知していることになる。
【０２４０】
すなわち、通知する発行クレジット３２７の量と間隔のどちらを変動させても単位時間当たりの通知するクレジット量は同じように調整可能である。なお、発行クレジット３２７の通知間隔を変動させる場合、ステップ８０８における処理の実行間隔は１秒のままで、メッセージサーバ３０１が、接続ごとに前回発行クレジット３２７を通知した時刻と通知間隔とを保持しておき、それぞれの接続における発行クレジット３２７の通知間隔が保持された通知間隔と一致するようにメッセージ送信者に発行クレジット３２７を通知する。
【０２４１】
また、（ｅ）各接続のクレジット消費量については、これに替えて時間当たりのクレジット消費量を用いる。
【０２４２】
前述したように、通知する発行クレジット３２７を固定して発行クレジット３２７の通知間隔を変化させることによって、発行クレジット３２７の消費量の少ない、すなわち、使用帯域の狭い通信への発行クレジット３２７の通知の頻度を減らすことができ、ネットワーク帯域を有効に活用することができる。
【０２４３】
当然、通知間隔があまりに頻繁になった場合に、通知する発行クレジット３２７の発行量を増やして通知間隔を広げるなど、通知間隔と通知するクレジット量との両方を変動させてもよい。
【０２４４】
また、本実施形態においては、メッセージング基盤において、送信可能量を表す発行クレジット３２７を用いて優先度を制御する方法を説明したが、本発明で開示する優先度制御方法の実施はメッセージング基盤に限るものではない。例えば、複数のＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）接続を中継する装置において、ＴＣＰのＡＣＫ応答おけるウィンドウを発行クレジット３２７として用いることによって、複数のＴＣＰ接続の優先度を制御することができる。
【０２４５】
また、イーサネットのスイッチングハブにおいても、ＰＡＵＳＥフレームの送出タイミング又は中断時間を制御することによって、ＰＡＵＳＥフレームが本実施形態における発行クレジット３２７の役割を果たすことができ、スイッチングハブで中継する複数のイーサネット接続間の優先度制御を行うことができる。
【０２４６】
クレジット制御部４２８は、ステップ８０８において、優先度情報４３４、サーバ状態情報４３５、配送状態３２８及びキュー状態３２９を用いて、発行クレジット３２７を決定する。
【０２４７】
図１で説明したように、優先度情報４３４、サーバ状態情報４３５、配送状態３２８及びキュー状態３２９は、メッセージサーバ装置１０１の記憶装置１０６に格納される。
【０２４８】
以下、それぞれの情報について説明する。
【０２４９】
なお、図３における優先度情報４３４は優先度情報１２２に、サーバ状態情報４３５はサーバ状態１２１に、配送状態３２８は配送状態１２３に、キュー状態３２９はキュー状態１２４に、それぞれ対応する。
【０２５０】
図１７は、本発明の第１の実施形態のサーバ状態情報４３５の一例を示す説明図である。
【０２５１】
サーバ状態情報４３５は、サーバＩＤ１８０１、ＣＰＵ使用率１８０２、及び検出時刻１８０３を含む。
【０２５２】
サーバＩＤ１８０１は、メッセージサーバ３０１を実行するメッセージサーバ装置１０１を一意に識別するための識別子である。ＣＰＵ使用率１８０２は、サーバＩＤ１８０１に対応するメッセージサーバ装置１０１におけるＣＰＵの使用率である。ＣＰＵ使用率１８０２は、（ｄ）ＣＰＵ使用率に対応する情報である。検出時刻１８０３は、サーバ状態（ＣＰＵ使用率１８０２）が検出された時刻である。メッセージサーバ装置１０１が複数のＣＰＵを搭載している場合は、各ＣＰＵ使用率の平均を用いたり、合計値を用いたりすることによって本実施形態を適用可能である。
【０２５３】
図１８は、本発明の第１の実施形態の優先度情報４３４の一例を示す説明図である。
【０２５４】
優先度情報４３４は、送信者ＩＤ１９０１、受信者ＩＤ１９０２及び帯域比１９０３を含む。
【０２５５】
送信者ＩＤ１９０１は、メッセージを送信するメッセージ送信者を一意に識別するための識別子である。受信者ＩＤ１９０２は、メッセージを受信するメッセージ受信者を一意に識別するための識別子である。送信者ＩＤ１９０１及び受信者ＩＤ１９０２によって、対象となるメッセージ伝達を識別することが可能となる。
【０２５６】
帯域比１９０３は、送信者ＩＤ１９０１に対応するメッセージ送信者と受信者ＩＤ１９０２に対応するメッセージ受信者との間の接続に割り当てられた帯域比である。帯域比１９０３は、（ｂ）ネットワーク帯域に余裕がない場合に各接続が使用できる帯域の比に対応する情報である。
【０２５７】
なお、図１８に示すものとは別に、（ａ）全接続において使用できるネットワーク帯域、及び（ｃ）ＣＰＵ使用率の上限が保持される。
【０２５８】
図１９は、本発明の第１の実施形態の配送状態３２８の一例を示す説明図である。
【０２５９】
配送状態３２８は、送信者ＩＤ２００１、受信者ＩＤ２００２、転送量２００３及び検出時刻２００４を含む。
【０２６０】
送信者ＩＤ２００１は、メッセージを送信するメッセージ送信者を一意に識別するための識別子である。受信者ＩＤ２００２は、メッセージを受信するメッセージ受信者を一意に識別するための識別子である。送信者ＩＤ２００１及び受信者ＩＤ２００２によって、対象となるメッセージ伝達を識別することが可能となる。
【０２６１】
転送量２００３は、送信されたメッセージのデータ量、すなわち、消費された発行クレジット３２７のクレジット量を表す。転送量２００３は、（ｅ）各接続の前回発行された発行クレジット３２７の消費量に対応する情報である。検出時刻２００４は、転送量２００３が検出された時刻である。
【０２６２】
図２０は、本発明の第１の実施形態のキュー状態３２９の一例を示す説明図である。
【０２６３】
キュー状態３２９は、キューＩＤ２１０１、使用容量２１０２、全体容量２１０３及び検出時刻２１０４を含む。
【０２６４】
キューＩＤ２１０１は、対象とするキュー４２３を一意に識別するための識別子である。使用容量２１０２は、キューＩＤ２１０１に対応するキュー４２３の使用容量である。全体容量２１０３は、キューＩＤ２１０１に対応するキュー４２３の全体容量である。検出時刻２１０４は、使用容量２１０２及び全体容量２１０３が検出された時刻である。
【０２６５】
クレジット制御部４２８は、使用容量２１０２、全体容量２１０３及び検出時刻２１０４を用いて、（ｆ）各キューの空き容量を算出することができる。
【０２６６】
クレジット制御部４２８は、図１７〜図２０に示した情報を用いて発行クレジット３２７を算出する。
【０２６７】
図２１は、本発明の第１の実施形態のクレジット管理情報１２５の一例を示す説明図である。
【０２６８】
クレジット管理情報１２５は、送信者ＩＤ２２０１、受信者ＩＤ２２０２、発行クレジット２２０３及び発行時刻２２０４を含む。
【０２６９】
送信者ＩＤ２２０１は、メッセージを送信するメッセージ送信者を一意に識別するための識別子である。受信者ＩＤ２２０２は、メッセージを受信するメッセージ受信者を一意に識別するための識別子である。送信者ＩＤ２２０１及び受信者ＩＤ２２０２によって、対象となるメッセージ伝達を識別することが可能となる。
【０２７０】
発行クレジット２２０３は、ステップ８０８において算出された発行クレジット３２７のクレジット量である。発行時刻２２０４は、発行クレジット２２０３が発行された時刻である。
【０２７１】
クレジット管理情報１２５は、例えば以下に示すように作成される。
【０２７２】
ステップ８０８において、クレジット集中管理部３２１は、優先度情報４３４から各接続を識別するための情報（例えば、ＩＰアドレス等）を取得し、当該取得した情報に基づいてエントリを生成する。さらに、クレジット集中管理部３２１は、当該エントリに発行される発行クレジット３２７を算出し、発行クレジット２２０３に格納する。
【０２７３】
なお、図１７〜２１に示す各ＩＤには、例えば、ホスト名、ＩＰアドレス、ポート番号、プロセス番号、単調増加するカウンタ値、及び、これらの組み合わせが考えられるが、これらに限るものではない。また、時刻については、前後関係を一意に識別するための値であり、例えば、日付、時刻、単調増加するカウンタ値などが考えられるが、これらに限るものではない。さらに、送信者ＩＤと受信者ＩＤとの組み合わせは制御対象のメッセージ伝達を識別するための一例であり、制御対象のメッセージ伝達を識別可能であればこれに限るものではない。
【０２７４】
図２２は、クレジット集中管理部３２１を備えていないメッセージサーバ２０１のソフトウェア構成を説明するブロック図である。
【０２７５】
なお、図において、四角又は丸四角は、メッセージサーバ装置１０１、メッセージクライアント装置１０２又はメッセージクライアント装置１０３上で実行されるプログラムによって実現される処理ブロックを表す。また、処理ブロック間の矢印は、矢印の方向に情報又は指示が伝えられることを示す。また、矢印に対するキャプション及び符号は処理ブロック間で伝えられる情報又は指示を表す。
【０２７６】
メッセージ送信者２０２、２０３、受信／配送部２１４−１、２１４−２、キュー部２１５−１、２１５−２、送信部２１６−１、２１６−２、全体制御部２２２、及び、メッセージ受信者２０４、２０５の基本的な機能は、図２に示すメッセージサーバ３０１と同一であるため説明を省略する。図２２に示す例では、各受信／配送部２１４−１、２１４−２が、それぞれ、クレジット発行部２１７−１、２１７−２を備える点が異なる。
【０２７７】
また、ヘッダ付メッセージ２０６、２０８、２１０、２１２、送信制御情報２０７、２０９、２１１、２１３、及びメッセージ２２３、２２４、２２５、２２６は、図２に示すメッセージサーバと同一であるため説明を省略する。
【０２７８】
以下、メッセージ送信者２０２がメッセージ受信者２０４に対してメッセージを伝達する場合を例に、図２との差異を中心に説明する。
【０２７９】
まず、メッセージ送信者２０２は、メッセージサーバ２０１に接続し、メッセージサーバ２０１の受信／配送部２１４−１から送信制御情報２０７を受信する。送信制御情報２０７には、クレジット発行部２１７−１が発行した送信可能容量を表す発行クレジットを含む。
【０２８０】
メッセージ送信者２０２は、受信した送信制御情報２０７に含まれる発行クレジットを記憶する。また、メッセージ送信者２０２は、受信した送信制御情報２０７に含まれる発行クレジットの範囲内で、送信するメッセージに送信先であるメッセージ受信者２０４を示す情報又はメッセージサイズなどのヘッダ情報を追加し、ヘッダ付メッセージ２０６として受信／配送部２１４−１へ送信する。
【０２８１】
メッセージ送信者２０２は、ヘッダ付メッセージ２０６を送信する際に、記憶された発行クレジットから当該送信したヘッダ付メッセージ２０６の容量に対応するクレジット量を減算する。メッセージ送信者２０２は、当該発行クレジットの減算結果が「０」未満となる場合、メッセージの送信を停止する。
【０２８２】
すなわち、発行クレジットを通して受信／配送部２１４−１は、メッセージ送信者２０２から送信されるメッセージの容量を制御する。
【０２８３】
クレジット発行部２１７−１は、キュー部２１５−１の空き容量を基準に、メッセージ送信者２０２発行する発行クレジットの量を決定する。
【０２８４】
すなわち、クレジット発行部２１７−１は、キュー部２１５−１に関する情報のみに基づいて、発行する発行クレジットを決定するものであって、メッセージ送信者２０２からメッセージ受信者２０４への伝達のみを考慮したものである。すなわち、各メッセージ伝達は、独立して行われているため、メッセージ送信者２０２、２０３間の優先度制御をすることができない。
【０２８５】
メッセージ送信者２０２、２０３から送信されるメッセージに優先度を付加した場合であっても、各メッセージの伝達は互いに独立して制御されるものであるため、メッセージ送信者２０２、２０３の優先度制御はできない。また、メッセージ送信者２０２、２０３が同じキューに優先度を付加してメッセージを送信した場合であっても、優先度の制御はメッセージの受信後に行われるため、以下に述べるような状況においては優先度の制御が行えない。例えば、メッセージ送信者２０２が低優先度のメッセージを送信し、メッセージ送信者２０３が高優先度のメッセージを送信している場合で、メッセージ送信者２０２がメッセージサーバ２０１の使用できるネットワーク帯域を使い切ってしまうほど大量に送信を行った場合には、たとえ高優先度のメッセージであっても、メッセージ送信者２０３からのメッセージ受信が妨げられるために、メッセージ伝達の優先度制御ができない。
【０２８６】
メッセージサーバ３０１は、メッセージサーバ２０１と比較して、それぞれの受信／配送部にクレジット発行部を設置するのではなく、クレジット集中管理部３２１が発行するクレジットを集中管理している点、クレジット集中管理部３２１に対して優先度設定３１４が入力として与えられる点が異なる。
【０２８７】
第１の実施形態によれば、メッセージサーバ３０１は、メッセージ送信者３０２、３０３間のメッセージ送信量を制御することができる。つまり、メッセージサーバ３０１は、メッセージ送信者３０２からメッセージ受信者３０４へのメッセージ伝達と、メッセージ送信者３０３からメッセージ受信者３０５へのメッセージ伝達の間で優先度制御を行うことができる。また、メッセージサーバ３０１が受信可能なメッセージの容量を超えるメッセージが、メッセージ送信者３０２、３０３から送信されることを防止できる。
【０２８８】
すなわち、プロトコルに規定されたフロー制御を用いて複数接続間の優先度を制御することができる。
【０２８９】
また、発行クレジット３２７を通知する間隔を変化させることによって、発行クレジット３２７の通知に必要な通信を減らすことができ、ネットワーク帯域を有効に使うことができる。
【０２９０】
（第２の実施形態）
本発明の第２の実施形態は、第１の実施形態の機能を既存のメッセージサーバに加えてＱｏＳ制御部を設置することによって実現する。
【０２９１】
本発明第２の実施形態のシステムの全体構成、ハードウェア構成、プログラムの実行方法は、第１の実施形態と同一であるため説明を省略する。以下、第１の実施形態との差異を中心に説明する。
【０２９２】
図９は、本発明の第２の実施形態におけるメッセージング基盤システム全体のソフトウェア構成を説明するブロック図である。
【０２９３】
なお、図において、四角又は丸四角は、メッセージサーバ装置１０１、メッセージクライアント装置１０２又はメッセージクライアント装置１０３上で実行されるプログラムによって実現される処理ブロックを表す。また、処理ブロック間の矢印は、矢印の方向に情報又は指示が伝えられることを示す。また、矢印に対するキャプション及び符号は処理ブロック間で伝えられる情報又は指示を表す。
【０２９４】
なお、本発明によって提供される機能はメッセージサーバ装置１０１、メッセージクライアント装置１０２及びメッセージクライアント装置１０３上で実行されるプログラムによって実現されるため、以下で説明する各プログラムがどの装置で実行されてもよい。
【０２９５】
図９に示す例では、メッセージサーバ１００１とメッセージ送信者１００３、１００４との間にＱｏＳ制御部１００２を備える点が第１の実施形態と異なる。また、メッセージサーバ１００１がサーバ状態検出部１０２５を含む点が第１の実施形態と異なる。
【０２９６】
本実施形態では、メッセージ送信者１００３、１００４は、メッセージサーバ１００１と直接接続するのではなく、ＱｏＳ制御部１００２と接続し、ＱｏＳ制御部１００２がメッセージサーバ１００１と接続する。
【０２９７】
本実施形態において、メッセージサーバ１００１とＱｏＳ制御部１００２とをまとめて、一つの機能としてメッセージサーバ３０１とみなせば、本実施形態は第１の実施形態と同一のソフトウェア構成である。
【０２９８】
メッセージサーバ１００１は、図２２に示すメッセージサーバ２０１にサーバ状態検出部１０２５を追加した構成となっている。
【０２９９】
サーバ状態検出部１０２５は、サーバ状態検出部４２９と同様に、メモリ使用量及びＣＰＵ使用率などメッセージサーバ装置１０１等の状態情報を検出し、検出された状態情報をＱｏＳ制御部１００２のクレジット集中管理部１０２３に、サーバ状態１０２０として通知（送信）する。
【０３００】
なお、状態情報を取得できるのであれば、サーバ状態検出部１０２５は、メッセージサーバ１００１内部に含まれる必要はない。例えば、メッセージサーバ１００１が実行される同一の装置上で別にサーバ状態検出部１０２５を稼働させるもよいし、メッセージサーバ１００１とＱｏＳ制御部１００２とが同一の装置上で実行された場合には、ＱｏＳ制御部１００２にサーバ状態検出部１０２５の機能を含めてもよい。
【０３０１】
前述のような構成にすることによって、図２２に示すメッセージサーバ２０１をなんら変更することなくメッセージサーバ１００１として使用できるため、サーバ状態検出部１０２５を含むメッセージサーバ１００１を開発する手間を減らすことができる。
【０３０２】
ＱｏＳ制御部１００２は、全体制御部１０２４、クレジット集中管理部１０２３、転送制御部１０２１−１、１０２１−２を含む。
【０３０３】
全体制御部１０２４は、ＱｏＳ制御部１００２全体の動作を制御する。
【０３０４】
クレジット集中管理部１０２３は、転送制御部１０２１−１、１０２１−２から送信される消費クレジット１０２７及び利用可能クレジット１０２８と、メッセージサーバ１００１のサーバ状態検出部１０２５から通知されるサーバ状態１０２０と、優先度設定１０１９の各設定情報とに基づいて、転送制御部１０２１−１、１０２１−２に対して発行する発行クレジット１０２６を調整し、複数のメッセージ伝達間の優先度を制御する。
【０３０５】
転送制御部１０２１−１、１０２１−２は、メッセージ送信者１００３、１００４と、メッセージサーバ１００１とのメッセージ伝達をそれぞれ仲介する。
【０３０６】
転送制御部１０２１−１、１０２１−２は、ヘッダ付メッセージ１００７、１００９から、それぞれのメッセージ伝達によって消費されたクレジット量をそれぞれ検出して消費クレジット１０２７としてクレジット集中管理部１０２３に送信する。また、転送制御部１０２１−１、１０２１−２は、メッセージサーバ１００１から受信した送信制御情報１０１６、１０１８から、それぞれの接続に対して発行されたクレジット量を検出して利用可能クレジット１０２８としてクレジット集中管理部１０２３に送信する。
【０３０７】
また、転送制御部１０２１−１、１０２１−２は、メッセージ送信者１００３、１００４に対して、クレジット集中管理部１０２３から送信された発行クレジット１０２６を含む送信制御情報１００８、１０１０をそれぞれ送信する。
【０３０８】
以下、転送制御部１０２１−１、１０２１−２を区別しない場合、転送制御部１０２１と記載する。
【０３０９】
なお、転送制御部１０２１は、必要に応じて全体制御部１０２４によって作成され、また削除されるため転送制御部１０２１の個数は２個に限られるものではない。
【０３１０】
以下、ＱｏＳ制御部１００２に含まれる、全体制御部１０２４、クレジット集中管理部１０２３及び転送制御部１０２１の処理について詳述する。
【０３１１】
図１０は、本発明第２の実施形態のＱｏＳ制御部１００２の構成を説明するブロック図である。
【０３１２】
なお、図において、四角又は丸四角は、メッセージサーバ装置１０１、メッセージクライアント装置１０２又はメッセージクライアント装置１０３上で実行されるプログラムによって実現される処理ブロックを表す。また、処理ブロック間の矢印は、矢印の方向に情報又は指示が伝えられることを示す。また、矢印に対するキャプション及び符号は処理ブロック間で伝えられる情報又は指示を表す。
【０３１３】
ＱｏＳ制御部１００２は、全体制御部１０２４、クレジット集中管理部１０２３、及び転送制御部１０２１を含む。
【０３１４】
転送制御部１０２１は、必要に応じて全体制御部１０２４によって作成され、また、削除され、転送制御部１０２１の個数は０以上の任意の値を取り得る。
【０３１５】
続いて、各部の内部構成について説明する。
【０３１６】
転送制御部１０２１は、データ受信部１１１４、ヘッダ抽出部１１１５、データ送信部１１１６、送信制御情報送信部１１１７、クレジット消費検出部１１１８、及び送信制御情報受信部１１１９を含む。
【０３１７】
データ受信部１１１４は、メッセージ送信者１００３、１００４からヘッダ付メッセージ１１０２を受信し、受信したヘッダ付メッセージ１１０２をヘッダ付メッセージ１１２３としてヘッダ抽出部１１１５に送信する。
【０３１８】
ヘッダ抽出部１１１５は、受信したヘッダ付メッセージ１１２３からヘッダ情報１１２５を抽出する。また、ヘッダ抽出部１１１５は、ヘッダ付メッセージ１１２３をヘッダ付メッセージ１１２４としてデータ送信部に送信する。
【０３１９】
データ送信部１１１６は、受信したヘッダ付メッセージ１１２４をヘッダ付メッセージ１１０４としてメッセージサーバ１００１に送信する。
【０３２０】
送信制御情報送信部１１１７は、発行クレジット１０２６を含む送信制御情報１１０３をメッセージ送信者１００３、１００４に送信する。メッセージ送信者１００３、１００４は、受信した送信制御情報送信部１１１７に含まれる発行クレジット１０２６に基づいて、適切な容量のメッセージを送信する。
【０３２１】
なお、メッセージ送信者１００３、１００４は、メッセージを送信する際に受信した送信制御情報１００８、１０１０に含まれる発行クレジット１０２６から送信するメッセージの容量に対応するクレジット量を減算する。メッセージ送信者１００３、１００４は、当該発行クレジット１０２６の減算結果が「０」未満となる場合、メッセージの送信を停止する。
【０３２２】
クレジット消費検出部１１１８は、受信したヘッダ情報１１２５に基づいて、発行クレジット１０２６の消費量を検出し、検出された発行クレジット１０２６の消費量を消費クレジット１０２７としてクレジット制御部１１２１に送信する。すなわち、消費クレジット１０２７は、メッセージ送信者１００３、１００４から送信されたメッセージの送信量又は送信によって消費されたクレジット量を表す。
【０３２３】
送信制御情報受信部１１１９は、メッセージサーバ１００１から送信制御情報１１０５を受信し、受信した送信制御情報１１０５に含まれるクレジット量を利用可能クレジット１０２８としてクレジット制御部１１２１に送信する。ここで、利用可能クレジット１０２８とは、メッセージ送信者（本実施形態では、メッセージ送信者１００３、１００４）が送信可能なメッセージの容量を示す。すなわち、それぞれのメッセージ送信者１００３、１００４についてメッセージサーバ１００１が送信を許可したメッセージの容量を表す。
【０３２４】
クレジット集中管理部１０２３は、優先度管理部１１２０、クレジット制御部１１２１、及びサーバ状態受付部１１２２を含む。
【０３２５】
優先度管理部１１２０は、外部から優先度設定１０１９を受信し、受信した優先度設定１０１９を優先度情報１１２６としてクレジット制御部１１２１に送信する。
【０３２６】
サーバ状態受付部１１２２は、サーバ状態検出部１０２５によって検出されたサーバ状態１０２０を受信し、受信したサーバ状態１０２０をサーバ状態情報１１２７としてクレジット制御部１１２１に送信する。
【０３２７】
クレジット制御部１１２１は、消費クレジット１０２７、利用可能クレジット１０２８、優先度情報１１２６、及びサーバ状態情報１１２７に基づいて、発行クレジット１０２６を決定し、決定された発行クレジット１０２６を送信制御情報送信部１１１７に送信する。
【０３２８】
次に、メッセージ送信者１００３、１００４からメッセージサーバ１００１へのメッセージの送信を例に、図１０、図１１及び図１２を用いて各部の動作を説明する。
【０３２９】
図１１は、本発明の第２の実施形態のＱｏＳ制御部１００２における転送制御部１０２１の処理を説明するフローチャートである。図１２は、本発明の第２の実施形態のＱｏＳ制御部１００２におけるクレジット集中管理部１０２３の処理を説明するフローチャートである。
【０３３０】
前述したように、本実施形態では、メッセージ送信者１００３、１００４は、ＱｏＳ制御部１００２と接続し、ＱｏＳ制御部１００２はメッセージサーバ１００１と接続する。
【０３３１】
ＱｏＳ制御部１００２は、メッセージ送信者１００３、１００４から接続を受け付けると、全体制御部１０２４が転送制御部１０２１を作成し、転送制御部１０２１はメッセージサーバ１００１に接続する。また、メッセージ送信者１００３、１００４からの接続が終了すると、転送制御部１０２１はメッセージサーバ１００１への接続を切断し、全体制御部１０２４が転送制御部１０２１を削除する。
【０３３２】
なお、転送制御部１０２１を接続の度に作成せずに、以前作成された転送制御部１０２１を再利用して、処理時間を削減してもよい。
【０３３３】
まず、図１１を用いて転送制御部１０２１の処理を説明する。転送制御部１０２１は前述の処理にしたがって作成され、また、メッセージサーバ１００１及びメッセージ送信者１００３又は１００４に接続されているものとする。
【０３３４】
開始状態１２０１から処理が開始されると、転送制御部１０２１は、送信制御情報１１０５を受信したか否かを判定する（ステップ１２０２）。具体的には、送信制御情報受信部１１１９が、メッセージサーバ１００１から通知クレジットが含まれる送信制御情報１１０５を受信しているか否かを判定する。
【０３３５】
送信制御情報１１０５を受信していないと判定された場合、転送制御部１０２１は、ステップ１２０４に進む。
【０３３６】
送信制御情報１１０５を受信したと判定された場合、転送制御部１０２１は、クレジット集中管理部１０２３に利用可能クレジット１０２８を通知（送信）する（ステップ１２０３）。具体的には、送信制御情報受信部１１１９が、受信した送信制御情報１１０５に含まれる量を利用可能クレジット１０２８としてクレジット集中管理部１０２３のクレジット制御部１１２１に通知する。
【０３３７】
次に、転送制御部１０２１は、クレジット集中管理部１０２３から発行クレジット１０２６が通知されたか否かを判定する（ステップ１２０４）。具体的には、送信制御情報送信部１１１７が、クレジット制御部１１２１から発行クレジット１０２６が通知されたか否かを判定する。
【０３３８】
クレジット集中管理部１０２３から発行クレジット１０２６が通知されていないと判定された場合、転送制御部１０２１は、ステップ１２０６に進む。
【０３３９】
クレジット集中管理部１０２３から発行クレジット１０２６が通知されたと判定された場合、転送制御部１０２１は、メッセージ送信者１００３、１００４に送信制御情報１１０３を送信する（ステップ１２０５）。具体的には、送信制御情報送信部１１１７が、通知された発行クレジット１０２６を含む送信制御情報１１０３をメッセージ送信者１００３、１００４に送信する。
【０３４０】
次に、転送制御部１０２１は、メッセージ送信者１００３、１００４からメッセージを受信したか否かを判定する（ステップ１２０６）。具体的には、データ受信部１１１４が、メッセージ送信者１００３、１００４からヘッダ付メッセージ１１０２を受信しているか否かを判定する。
【０３４１】
メッセージ送信者１００３、１００４からメッセージを受信していないと判定された場合、転送制御部１０２１は、終了状態１２１０へと移り処理を終了する。
【０３４２】
メッセージ送信者１００３、１００４からメッセージを受信したと判定された場合、転送制御部１０２１は、受信したメッセージからヘッダ情報を抽出する（ステップ１２０７）。具体的には、ヘッダ抽出部１１１５が、データ受信部１１１４が受信したヘッダ付メッセージ１１０２をヘッダ付メッセージ１１２３として受信し、当該ヘッダ付メッセージ１１２３からヘッダ情報１１２５を抽出する。さらに、ヘッダ抽出部１１１５が、抽出されたヘッダ情報１１２５をクレジット消費検出部１１１８に送信する。
【０３４３】
次に、転送制御部１０２１は、クレジット集中管理部１０２３に消費クレジット１０２７を通知（送信）する（ステップ１２０８）。具体的には、クレジット消費検出部１１１８が、受信したヘッダ情報１１２５を用いて、メッセージ送信によって消費されたクレジット量を算出し、算出結果を消費クレジット１０２７としてクレジット集中管理部１０２３のクレジット制御部１１２１に通知する。
【０３４４】
次に、転送制御部１０２１は、データ（メッセージ）を送信し（ステップ１２０９）、その後終了状態１２１０へと移り処理を終了する。具体的には、データ送信部１１１６が、ヘッダ抽出部１１１５からヘッダ付メッセージ１１２３をヘッダ付メッセージ１１２４として受信し、当該ヘッダ付メッセージ１１２４をヘッダ付メッセージ１１０４としてメッセージサーバ１００１に送信する。
【０３４５】
転送制御部１０２１は、前述した処理をメッセージ送信者１００３、１００４からの接続が切断されるまで繰り返し実行する。
【０３４６】
次に、図１２を用いてクレジット集中管理部１０２３の処理を説明する。
【０３４７】
開始状態１３０１から処理が開始されると、クレジット集中管理部１０２３は、優先度設定１０１９を受け付ける（ステップ１３０２）。具体的には、優先度管理部１１２０が、ＱｏＳ制御部１００２の管理者等から優先度設定１０１９を受け付ける。
【０３４８】
優先度管理部１１２０が優先度設定１０１９を受け付けた場合、優先度設定情報として保存され、優先度管理部１１２０が優先度設定１０１９を受け付けていない場合、ステップ１３０３に進む。
【０３４９】
次に、クレジット集中管理部１０２３は、サーバ状態１０２０を受け付ける（ステップ１３０３）。具体的には、サーバ状態受付部１１２２が、メッセージサーバ１００１から、メモリ使用量又はＣＰＵ使用率などを含むサーバ状態１０２０を受け付ける。サーバ状態受付部１１２２がサーバ状態１０２０を受け付けた場合、サーバ状態情報として保存され、サーバ状態受付部１１２２がサーバ状態１０２０を受け付けていない場合ステップ１３０４に進む。
【０３５０】
クレジット集中管理部１０２３は、優先度情報１１２６を参照する（ステップ１３０４）。具体的には、クレジット制御部１１２１が、優先度管理部１１２０に保存される優先度設定情報を優先度情報１１２６として参照する。
【０３５１】
クレジット集中管理部１０２３は、サーバ状態情報１１２７を参照する（ステップ１３０５）。具体的には、クレジット制御部１１２１が、サーバ状態受付部１１２２に保存されるサーバ状態情報をサーバ状態情報１１２７として参照する。
【０３５２】
クレジット集中管理部１０２３は、消費クレジット１０２７を参照する（ステップ１３０６）。具体的には、クレジット制御部１１２１が、転送制御部１０２１のクレジット消費検出部１１１８から通知された消費クレジット１０２７を参照する。
【０３５３】
クレジット集中管理部１０２３は、利用可能クレジット１０２８を参照する（ステップ１３０７）。具体的には、クレジット制御部１１２１が、送信制御情報受信部１１１９から通知された利用可能クレジット１０２８を参照する。
【０３５４】
クレジット集中管理部１０２３は、参照した各情報に基づいて、各転送制御部１０２１に通知する発行クレジット１０２６を算出する（ステップ１３０８）。具体的には、クレジット制御部１１２１が、優先度情報１１２６、サーバ状態情報１１２７、消費クレジット１０２７及び利用可能クレジット１０２８を用いて、各転送制御部１０２１に通知する発行クレジット１０２６を決定する。なお、発行クレジット１０２６の算出方法については後述する。
【０３５５】
クレジット集中管理部１０２３は、各転送制御部１０２１に発行クレジット１０２６を通知（送信）し（ステップ１３０９）、その後終了状態１３１０へと移り処理を終了する。具体的には、クレジット制御部１１２１が、決定された発行クレジット１０２６を各転送制御部１０２１の送信制御情報送信部１１１７に通知する。
【０３５６】
クレジット集中管理部１０２３は、前述した処理を繰り返し実行する。
【０３５７】
本実施形態の全体制御部１０２４は、ＱｏＳ制御部１００２におけるメインスレッドの動作を行うものであり、ＱｏＳ制御部１００２起動時の初期化、ＱｏＳ制御部１００２終了時の処理、ＱｏＳ制御部１００２の設定の管理、メッセージ送信者又はメッセージサーバとの各接続の開始及び終了処理、転送制御部１０２１の作成及び削除、並びに、スレッド及びプロセスの管理等を行う。
【０３５８】
以上、ＱｏＳ制御部１００２に含まれる転送制御部１０２１、クレジット集中管理部１０２３及び全体制御部１０２４のそれぞれの動作を説明した。
【０３５９】
なお、転送制御部１０２１及びクレジット集中管理部１０２３のそれぞれが繰り返し処理を実行する間隔の決定方法については、第１の実施形態と同一の方法を用いることが考えられる。
【０３６０】
以下、クレジット制御部１１２１が発行クレジット１０２６を算出する処理（ステップ１３０８）について説明する。
【０３６１】
ステップ１３０８では、クレジット制御部１１２１が、優先度情報１１２６、サーバ状態情報１１２７、消費クレジット１０２７及び利用可能クレジット１０２８を用いて、発行クレジット１０２６を決定する。
【０３６２】
発行クレジット１０２６の算出方法は、第１の実施形態におけるクレジット集中管理部３２１のクレジット制御部４２８が発行クレジット１０２６を算出する処理（ステップ８０８）と同様に方法を用いることができる。
【０３６３】
すなわち、ステップ８０８において、優先度情報４３４として優先度情報１１２６を、サーバ状態情報４３５としてサーバ状態情報１１２７を、配送状態３２８として消費クレジット１０２７を、キュー状態３２９として利用可能クレジット１０２８を用い、また、決定された発行３２７を発行クレジット１０２６として用いればよい。
【０３６４】
なお、ステップ１３０８において用いられる情報の例、及び算出方法については第１の実施形態と同一であるため説明を省略する。
【０３６５】
（第２の実施形態の変形例）
メッセージサーバ１００１とＱｏＳ制御部１００２とを同一の装置上で実行した場合、ＱｏＳ制御部１００２にサーバ状態検出部１０２５の機能を含めることができる。
【０３６６】
この場合、クレジット集中管理部１０２３のサーバ状態受付部１１２２に代えてサーバ状態検出部を設置すれば、クレジット集中管理部１０２３は、第１の実施形態におけるクレジット集中管理部３２１と同一の構成になる。このような構成にした場合、図２２に示すメッセージサーバ２０１を、なんら変更することなくメッセージサーバ１００１として使用できるため、メッセージサーバを開発する手間を減らすことができる。
【０３６７】
また、サーバ状態１０２０、並びに、当該サーバ状態１０２０に付随する処理及び機能ブロックを省略した構成（以下、サーバ状態省略構成とも記載する。）としてもよい。サーバ状態省略構成では、プログラム及び制御を簡素化できるとともに、メッセージサーバ２０１を、なんら変更することなくメッセージサーバ１００１として使用できるため、メッセージサーバを開発する手間を減らすことができる。
【０３６８】
本実施形態によれば、既存のメッセージサーバに対してほとんど変更を加えることなく優先度制御機能を実現できる。
【０３６９】
（第３の実施形態）
本発明の第３の実施形態は、ＱｏＳ制御部の設置位置が変更されている点が第２の実施形態と異なる。以下、第２の実施形態と共通する部分の説明は省略し、第２の実施形態との差異を中心に説明する。
【０３７０】
図１３は、本発明の第３の実施形態におけるメッセージ基盤システム全体のソフトウェア構成を説明するブロック図である。
【０３７１】
なお、図において、四角又は丸四角は、メッセージサーバ装置１０１、メッセージクライアント装置１０２又はメッセージクライアント装置１０３上で実行されるプログラムによって実現される処理ブロックを表す。また、処理ブロック間の矢印は、矢印の方向に情報又は指示が伝えられることを示す。また、矢印に対するキャプション及び符号は処理ブロック間で伝えられる情報又は指示を表す。
【０３７２】
以下、図１３、図９及び図１０を用いて本実施形態を説明する。
【０３７３】
図９に示す例では、メッセージ送信者１００３、１００４とメッセージサーバ１００１との間にＱｏＳ制御部１００２が挿入された構成であったが、本実施形態では図１３に示すように、メッセージサーバ１４０１とメッセージ受信者１４０５、１４０６との間にＱｏＳ制御部１４０２が挿入された構成となっている。
【０３７４】
なお、ＱｏＳ制御部１４０２は、サーバ状態省略構成を取り、サーバ状態１０２０に基づく制御が行われない。
【０３７５】
第３の実施形態では、図１３に示すような構成によって、メッセージ受信者間（メッセージ受信者１４０５とメッセージ受信者１４０６との間）の優先度制御が可能となる。
【０３７６】
具体的には、ＱｏＳ制御部１４０２が、優先度設定１４１９と送信制御情報１４１２、１４１４とに基づいて決定された送信制御情報１４１６、１４１８を用いて、メッセージサーバ１４０１からのヘッダ付メッセージ１４１５、１４１７の送信量を制御する。すなわち、ＱｏＳ制御部１４０２は、ヘッダ付メッセージ１４１１及びヘッダ付メッセージ１４１３を制御する。
【０３７７】
当該制御によって、メッセージ受信者１４０５、１４０６から送信された送信制御情報１４１２、１４１４と、ＱｏＳ制御部１４０２に入力された優先度設定１４１９とに基づいた、各メッセージ伝達間の優先度制御が可能となる。
【０３７８】
また、本実施形態では、メッセージ受信者１４０５、１４０６はＱｏＳ制御部１４０２に接続し、ＱｏＳ制御部１４０２はメッセージサーバ１４０１に接続する。
【０３７９】
本実施形態では、ＱｏＳ制御部１４０２は、メッセージ受信者１４０５、１４０６から接続を受け付け、全体制御部１０２４が転送制御部１０２１を作成し、作成された転送制御部１０２１がメッセージサーバに接続する。
【０３８０】
メッセージ受信者１４０５、１４０６からの接続が終了すると、転送制御部１０２１はメッセージサーバ１４０１への接続を切断し、全体制御部１０２４が転送制御部１０２１を削除する。
【０３８１】
なお、接続の度に転送制御部１０２１を作成せずに、以前作成された転送制御部１０２１を再利用することで、処理時間を削減してもよい。
【０３８２】
なお、ＱｏＳ制御部１４０２の動作については、第２の実施形態のＱｏＳ制御部１００２と同一である。ただし、各構成の設置位置が変更されているため、第２の実施形態の説明におけるメッセージサーバ１００１がメッセージ受信者１４０５、１４０６となり、第２の実施形態の説明におけるメッセージ送信者１００３、１００４がメッセージサーバ１４０１となる。また、本実施形態では、ＱｏＳ制御部１４０２はサーバ状態省略構成を取っているため、サーバ状態１０２０に基づく制御を行わない。
【０３８３】
（第４の実施形態）
本発明の第４の実施形態は、ＱｏＳ制御部の設置位置が変更されている点が第２の実施形態と異なる。以下、第２の実施形態と共通する部分の説明は省略し、第２の実施形態との差異を中心に説明する。
【０３８４】
図１４は、本発明の第４の実施形態におけるメッセージ基盤システム全体のソフトウェア構成を説明するブロック図である。
【０３８５】
なお、図において、四角又は丸四角又はＱｏＳ制御部１５０２は、メッセージサーバ装置１０１、メッセージクライアント装置１０２又はメッセージクライアント装置１０３上で実行されるプログラムによって実現される処理ブロックを表す。また、処理ブロック間の矢印は、矢印の方向に情報又は指示が伝えられることを示す。また、矢印に対するキャプション及び符号は処理ブロック間で伝えられる情報又は指示を表す。
【０３８６】
以下、図１４、図９及び図１０を用いて本実施形態を説明する。
【０３８７】
図９に示す例では、メッセージ送信者１００３、１００４とメッセージサーバ１００１との間にＱｏＳ制御部１００２が挿入された構成であったが、本実施形態では図１４に示すように、メッセージサーバ１５０１とメッセージ受信者１５０５、１５０６との間にもＱｏＳ制御部１５０２が挿入された構成となっている。
【０３８８】
なお、ＱｏＳ制御部１５０２の構成は第２の実施形態と同一である。
【０３８９】
図１４に示すような構成によって、メッセージ送信者間（メッセージ送信者１５０３とメッセージ送信者１５０４との間）、メッセージ受信者間（メッセージ受信者１５０５とメッセージ受信者１５０６との間）、及びメッセージ送信者（メッセージ送信者１５０３及びメッセージ送信者１５０４）とメッセージ受信者（メッセージ受信者１５０５及びメッセージ受信者１５０６）との間の優先度制御が可能となる。
【０３９０】
本実施形態におけるＱｏＳ制御部１５０２は、優先度設定１５１９とサーバ状態１５２０、メッセージサーバ１５０１から送信される送信制御情報１５１６、１５１８、メッセージ受信者１５０５、１５０６から送信される送信制御情報１５１２、１５１４に基づいて、メッセージ送信者１５０３、１５０４へ送信される送信制御情報１５０８、１５１０、及びメッセージサーバ１５０１へ送信される送信制御情報１５１５、１５１７をそれぞれ制御する。
【０３９１】
これによって、メッセージ送信者１５０３、１５０４からメッセージサーバ１５０１へ送信されるヘッダ付メッセージ１５０７、１５０９、及び、メッセージサーバ１５０１からメッセージ受信者１５０５、１５０６へ送信されるヘッダ付メッセージ１５１１、１５１３をそれぞれ制御することが可能となる。
【０３９２】
従って、ＱｏＳ制御部１５０２によって、メッセージサーバ１５０１及びメッセージ受信者１５０５、１５０６の送信制御情報１５１２、１５１４、１５１６、１５１８と、メッセージサーバ１５０１の状態と、優先度設定１５１９とに基づいた各メッセージ伝達間の優先度制御が可能となる。
【０３９３】
本実施形態において、メッセージ送信者１５０３、１５０４及びメッセージ受信者１５０５、１５０６はＱｏＳ制御部１５０２に接続し、ＱｏＳ制御部１５０２はメッセージサーバ１５０１に接続する。
【０３９４】
ＱｏＳ制御部１５０２の内部構成は図１０に示すものと同一であるが、接続時の処理については、メッセージ送信者１５０３、１５０４からの接続については第２の実施形態におけるＱｏＳ制御部１００２と同一の処理を実行し、メッセージ受信者１５０５、１５０６からの接続については第３の実施におけるＱｏＳ制御部１４０２と同一の処理を実行する。
【０３９５】
ＱｏＳ制御部１５０２の他の処理については、第２の実施形態のＱｏＳ制御部１００２と同一である。ただし、メッセージ受信者１５０５、１５０６からの接続については、第２の実施形態の説明におけるメッセージサーバ１００１が本実施形態でのメッセージ受信者１５０５、１５０６に対応し、第２の実施形態でのメッセージ送信者１５０３、１５０４が本実施形態でのメッセージサーバ１５０１に対応する。
【０３９６】
本実施形態によれば、例えば、メッセージサーバの状態が高負荷である場合、メッセージ送信者との接続に割り当てるネットワーク帯域を少なくし、メッセージ受信者との接続に割り当てるネットワーク帯域を増やすといった制御が可能になり、メッセージサーバ１５０１に手を加えることなくメッセージサーバ１５０１の負荷の調整が可能となる。
【０３９７】
従って、第２の実施形態と比べて、よりメッセージサーバの状態に合わせた優先度制御が可能となる。
【０３９８】
また、例えば、あるメッセージ送信者からメッセージサーバへのメッセージ伝達と、メッセージサーバからメッセージの宛先であるメッセージ受信者へのメッセージ伝達と、をまとめて１つの接続として扱うことによって、メッセージ送信者からメッセージ受信者へのメッセージ伝達間で優先度制御が可能となる。
【０３９９】
（第５の実施形態）
本発明の第５の実施形態は、複数のメッセージサーバを備えるメッセージ基盤システムに適用した点が第２の実施形態と異なる。以下、第２の実施形態と共通する部分の説明は省略し、第２の実施形態との差異を中心に説明する。
【０４００】
図１５は、本発明の第５の実施形態におけるメッセージ基盤システム全体のソフトウェア構成を説明するブロック図である。
【０４０１】
なお、図において、四角又は丸四角は、メッセージサーバ装置１０１、メッセージクライアント装置１０２又はメッセージクライアント装置１０３上で実行されるプログラムによって実現される処理ブロックを表す。また、処理ブロック間の矢印は、矢印の方向に情報又は指示が伝えられることを示す。また、矢印に対するキャプション及び符号は処理ブロック間で伝えられる情報又は指示を表す。
【０４０２】
以下、図１５、図９及び図１０を用いて本実施形態を説明する。
【０４０３】
図９に示す例では、１個以上のメッセージ送信者と１個のメッセージサーバとの間にＱｏＳ制御部１００２が挿入された構成であったものが、本実施形態では図１６に示すように、１個以上のメッセージ送信者と複数のメッセージサーバ１６０１、１６０２との間にＱｏＳ制御部１６０３が挿入された構成となっている。なお、メッセージサーバは１６０１及び１６０２の２個に限るものではなく、２個以上あってもよい。
【０４０４】
なお、ＱｏＳ制御部１６０３の内部構成は、第２の実施形態と同一である。
【０４０５】
本実施形態によって、メッセージ送信者がそれぞれ異なるメッセージサーバと通信している場合であっても、メッセージ送信者間の優先度制御を行うことができる。
【０４０６】
図１５のＱｏＳ制御部１６０３においては、図９とメッセージ送信者及びメッセージ受信者の個数が異なるため、経由する信号の数が増えているが、図１０において転送制御部１０２１の個数が増えただけであり、第２の実施形態のＱｏＳ制御部１００２で対応可能である。
【０４０７】
本実施形態と第２の実施形態との相違点は、メッセージサーバ１６０１、１６０２が複数ある点と、サーバ状態検出部１６３９、１６４０からのサーバ状態１６３７、１６３８が複数入力される点である。
【０４０８】
なお、ＱｏＳ制御部１６０３の構成及び処理は、クレジット集中管理部１０２３を除いて第２の実施形態におけるＱｏＳ制御部１００２と同一である。以下、ＱｏＳ制御部１６０３に含まれるクレジット集中管理部（図示省略）の処理について説明する。
【０４０９】
図１６は、本発明の第５の実施形態のＱｏＳ制御部１６０３に含まれるクレジット集中管理部の処理を説明するフローチャートである。
【０４１０】
図１２に示す、クレジット集中管理部１０２３の処理と比較して、本実施形態ではメッセージサーバを２個備えることに伴って、２回同様の処理が実行される点が異なる。
【０４１１】
図１６において、各処理の方法は第２の実施形態と同一であるが、各処理で用いられる情報が異なる。
【０４１２】
開始状態１３０１は開始状態１７０１と対応する。
【０４１３】
ステップ１７０２は、ステップ１３０２と対応する。なお、ステップ１７０２では、ＱｏＳ制御部１６０３が優先度設定１６３６を受け付ける。
【０４１４】
ステップ１７０３及びステップ１７０４は、ステップ１３０３と対応する。なお、ステップ１７０３では、ＱｏＳ制御部１６０３がサーバ状態１６３７を受け付け、ステップ１７０４では、ＱｏＳ制御部１６０３がサーバ状態１６３８を受け付ける。
【０４１５】
ステップ１７０５は、ステップ１３０４と対応する。
【０４１６】
ステップ１７０６及びステップ１７１１は、ステップ１３０５と対応する。なお、ステップ１７０６では、ＱｏＳ制御部１６０３がサーバ状態１６３７をサーバ状態情報として参照し、ステップ１７１１では、ＱｏＳ制御部１６０３がサーバ状態１６３８をサーバ状態情報として参照する。
【０４１７】
ステップ１７０７及びステップ１７１２は、ステップ１３０６と対応する。なお、ステップ１７０７では、ＱｏＳ制御部１６０３がメッセージ送信者１６０４、１６０５から受信したヘッダ付メッセージ１６１２、１６１４から抽出された消費クレジットを参照し、ステップ１７１２では、ＱｏＳ制御部１６０３がメッセージ送信者１６０６、１６０７から受信したヘッダ付メッセージ１６１６、１６１８から抽出された消費クレジットを参照する。
【０４１８】
ステップ１７０８及びステップ１７１３は、ステップ１３０７と対応する。なお、ステップ１７０８では、ＱｏＳ制御部１６０３がメッセージサーバ１６０１から送信された送信制御情報１６２９、１６３１から検出された利用可能クレジットを参照し、ステップ１７１３では、ＱｏＳ制御部１６０３がメッセージサーバ１６０２から送信された送信制御情報１６３３、１６３５から検出された利用可能クレジットを参照する。
【０４１９】
ステップ１７０９及びステップ１７１４は、ステップ１３０８と対応する。なお、ステップ１７０９では、ＱｏＳ制御部１６０３がメッセージサーバ１６０１にメッセージを送信するメッセージ送信者１６０４、１６０５に対する発行クレジットを算出し、ステップ１７１４では、ＱｏＳ制御部１６０３がメッセージサーバ１６０２にメッセージを送信するメッセージ送信者１６０６、１６０７に対する発行クレジットを算出する。
【０４２０】
ステップ１７１０及びステップ１７１５は、ステップ１３０９と対応する。なお、ステップ１７１０では、ＱｏＳ制御部１６０３がメッセージサーバ１６０１にメッセージを送信するメッセージ送信者１６０４、１６０５と接続する各転送制御部に算出された各発行クレジットを通知し、ステップ１７１５では、ＱｏＳ制御部１６０３がメッセージサーバ１６０２にメッセージを送信するメッセージ送信者１６０６、１６０７と接続する各転送制御部に算出された各発行クレジットを通知する。
【０４２１】
終了状態１７１６は終了状態１３１０と対応する。
【０４２２】
すなわち、ステップ１７０６〜１７１０では、ステップ１７０２、ステップ１７０３及びステップ１７０５で取得された情報を用いて、メッセージサーバ１６０１にメッセージを送信するメッセージ送信者１６０４、１６０５に対する発行クレジットが算出され、各転送制御部の送信制御情報送信部に通知される。
【０４２３】
また、ステップ１７１１〜ステップ１７１５では、ステップ１７０２、ステップ１７０４及びステップ１７０５で取得された情報を用いて、メッセージサーバ１６０２にメッセージを送信するメッセージ送信者１６０６、１６０７に対する発行クレジットが算出され、各転送制御部の送信制御情報送信部に通知される。
【０４２４】
なお、図１６の各ステップにおける処理内容は、第２の実施形態と同一であるため説明を省略する。
【０４２５】
第５の実施形態によれば、メッセージ送信者がそれぞれ異なるメッセージサーバと通信する場合であっても、メッセージ送信者間の優先度制御を行うことができる。以下、具体的な例をあげて説明する。
【０４２６】
まず、図１５に示す構成において、優先度設定１６３６として、例えば、メッセージ送信者１６０４〜１６０７が使用できる帯域を「１０００Ｍｂｐｓ」、各メッセージ送信者１６０４〜１６０７の帯域比を「４：３：２：１」と割り当てる。
【０４２７】
この場合、ＱｏＳ制御部１６０３は、ステップ１７０２において前述の優先度設定１６３６を受け付け、ステップ１７０５において当該優先度設定を優先度情報として参照し、ステップ１７０９及びステップ１７１４において発行クレジットを算出するために用いる。
【０４２８】
ステップ１７０９における発行クレジットの算出処理では、ステップ９０２においてtotal_creditに前述した１０００Ｍｂｐｓが設定され、ステップ９０３において前述した帯域比４：３：２：１を用いてtotal_creditが比例配分される。
【０４２９】
具体的には、next_creditは、メッセージ送信者１６０４に対して４００Ｍｂｐｓ、メッセージ送信者１６０５に対して３００Ｍｂｐｓ、メッセージ送信者１６０６に対して２００Ｍｂｐｓ、メッセージ送信者１６０７に対して１００Ｍｂｐｓと割り当てられる。
【０４３０】
さらに、前述したnext_creditに基づいて、ステップ１７０９においてはメッセージサーバ１６０１にメッセージを送信するメッセージ送信者１６０４、１６０５への発行クレジットが算出され、ステップ１７１４においてはメッセージサーバ１６０２にメッセージを送信するメッセージ送信者１６０６、１６０７への発行クレジットが算出される。
【０４３１】
ステップ１７０９において算出された発行クレジットは、メッセージサーバ１６０１にメッセージを送信するメッセージ送信者１６０４、１６０５のみに通知される。
【０４３２】
一方、ステップ１７１４において算出された発行クレジットは、メッセージサーバ１６０２にメッセージを送信するメッセージ送信者１６０６、１６０７のみに通知される。
【０４３３】
前述したように、ステップ１７０９と、ステップ１７１４とにおいて、それぞれ個別に発行クレジットが算出されるが、全体として使用できる帯域として設定された帯域が、設定された各メッセージ送信者の帯域比に基づいて分配される。従って、メッセージサーバ１６０１、１６０２と異なるサーバと通信しているメッセージ送信者１６０４〜１６０７の間で優先度制御が可能となる。
【０４３４】
（第５の実施形態の変形例）
第２の実施形態に対してＱｏＳ制御部１００２の設置位置を変更した実施形態としての第３の実施形態及び第４の実施形態と同様に、第５の実施形態に対してもＱｏＳ制御部１６０３の設置位置を変更した実施形態をとることが可能である。この場合についても、第３の実施形態及び第４の実施形態と同様の効果が、複数のメッセージサーバに対して得られる。
【０４３５】
また、同様に、第２の実施形態において示したＱｏＳ制御部１００２のプログラム構成の変形例は、第５の実施形態に対しても適用可能である。
【０４３６】
これらの変形例については、第２の実施形態、第３の実施形態及び第４の実施形態と同一であるため説明を省略する。
【０４３７】
本発明の一実施形態によれば、既存のプロトコルを基づいて、複数のメッセージ伝送間の優先度制御を実現することが可能となる。
【符号の説明】
【０４３８】
１０１  メッセージサーバ装置
１０２  メッセージクライアント装置
１０３  メッセージクライアント装置
１０４  ネットワーク
１０５  ＣＰＵ
１０６  記憶装置
１０７  入出力装置
１０８  ネットワークインタフェース
１０９  共通バス
１１０  ＣＰＵ
１１１  記憶装置
１１２  入出力装置
１１３  ネットワークインタフェース
１１４  共通バス
１１５  ＣＰＵ
１１６  記憶装置
１１７  入出力装置
１１８  ネットワークインタフェース
１１９  共通バス
１２０  メッセージサーバ
１２１  サーバ状態
１２２  優先度情報
１２３  配送状態
１２４  キュー状態
１２５  クレジット管理情報
１２６  メッセージ送信者
１２７  メッセージ受信者
２０１  メッセージサーバ
２０２、２０３  メッセージ送信者
２０４、２０５  メッセージ受信者
２０６、２０８、２１０、２１２  ヘッダ付メッセージ
２０７、２０９、２１１、２１３  送信制御情報
２０７  送信制御情報
２１４  受信／配送部
２１５  キュー部
２１６  送信部
２１７  クレジット発行部
２２３、２２４、２２５、２２６  メッセージ
３０１  メッセージサーバ
３０２、３０３  メッセージ送信者
３０４、３０５  メッセージ受信者
３０６、３０８、３１０、３１１  ヘッダ付メッセージ
３０７、３０９、３１２、３１３  送信制御情報
３１４  優先度設定
３１５  受信／配送部
３１６  キュー部
３１７  送信部
３２１  クレジット集中管理部
３２２  全体制御部
３２３、３２４、３２５、３２６  メッセージ
３２７  発行クレジット
３２８  配送状態
３２９  キュー状態
４０２、４０４、４３０  ヘッダ付メッセージ
４０３、４０５  送信制御情報
４１２、４１４  メッセージ
４１３  エンキュー指示
４１５  デキュー指示
４１９  データ受信部
４２０  メッセージ抽出部
４２１  送信制御情報送信部
４２２  配送管理部
４２３  キュー
４２４  キュー状態管理部
４２５  データ送信部
４２６  送信制御情報受信部
４２７  優先度管理部
４２８  クレジット制御部
４２９  サーバ状態検出部
４３１  ヘッダ情報
４３２  操作指示
４３３  送信指示
４３４  優先度情報
４３５  サーバ状態情報
１００１  メッセージサーバ
１００２  ＱｏＳ制御部
１００３、１００４  メッセージ送信者
１００５、１００６  メッセージ受信者
１００７、１００９、１０１１、１０１３、１０１５、１０１７  ヘッダ付メッセージ
１００８、１０１０、１０１２、１０１４、１０１６、１０１８  送信制御情報
１０１９  優先度設定
１０２０  サーバ状態
１０２１  転送制御部
１０２３  クレジット集中管理部
１０２４  全体制御部
１０２５  サーバ状態検出部
１０２６  発行クレジット
１０２７  消費クレジット
１０２８  利用可能クレジット
１１０２、１１０４、１１２３、１１２４  ヘッダ付メッセージ
１１０３、１１０５  送信制御情報
１１１４  データ受信部
１１１５  ヘッダ抽出部
１１１６  データ送信部
１１１７  送信制御情報送信部
１１１８  クレジット消費検出部
１１１９  送信制御情報受信部
１１２０  優先度管理部
１１２１  クレジット制御部
１１２２  サーバ状態受付部
１１２５  ヘッダ情報
１１２６  優先度情報
１１２７  サーバ状態情報
１４０１  メッセージサーバ
１４０２  ＱｏＳ制御部
１４０３、１４０４  メッセージ送信者
１４０５、１４０６  メッセージ受信者
１４０７、１４０９、１４１１、１４１３、１４１５、１４１７  ヘッダ付メッセージ
１４０８、１４１０、１４１２、１４１４、１４１６、１４１８  送信制御情報
１４１９  優先度設定
１５０１  メッセージサーバ
１５０２  ＱｏＳ制御部
１５０３、１５０４  メッセージ送信者
１５０５、１５０６  メッセージ受信者
１５０７、１５０９、１５１１、１５１３  ヘッダ付メッセージ
１５０８、１５１０、１５１２、１５１４、１５１５、１５１６、１５１７、１５１８  送信制御情報
１５１９  優先度設定
１５２０  サーバ状態
１６０１、１６０２  メッセージサーバ
１６０３  ＱｏＳ制御部
１６０４、１６０５、１６０６、１６０７  メッセージ送信者
１６０８、１６０９、１６１０、１６１１  メッセージ受信者
１６１２、１６１４、１６１６、１６１８、１６２０、１６２２、１６２４、１６２６、１６２８、１６３０、１６３２、１６３４  ヘッダ付メッセージ
１６１３、１６１５、１６１７、１６１９、１６２１、１６２３、１６２５、１６２７、１６２９、１６３１、１６３３、１６３５  送信制御情報
１６３６  優先度設定
１６３７、１６３８  サーバ状態
１６３９、１６４０  サーバ状態検出部
１８０１  サーバＩＤ
１８０２  ＣＰＵ使用率
１８０３  検出時刻
１９０１  送信者ＩＤ
１９０２  受信者ＩＤ
１９０３  帯域比
２００１  送信者ＩＤ
２００２  受信者ＩＤ
２００３  転送量
２００４  検出時刻
２１０１  キューＩＤ
２１０２  使用容量
２１０３  全体容量
２１０４  検出時刻
２２０１  送信者ＩＤ
２２０２  受信者ＩＤ
２２０３  発行クレジット
２２０４  発行時刻
【図１】
2011182115.tif 000003
【図２】
2011182115.tif 000004
【図３】
2011182115.tif 000005
【図４】
2011182115.tif 000006
【図５】
2011182115.tif 000007
【図６】
2011182115.tif 000008
【図７】
2011182115.tif 000009
【図８】
2011182115.tif 000010
【図９】
2011182115.tif 000011
【図１０】
2011182115.tif 000012
【図１１】
2011182115.tif 000013
【図１２】
2011182115.tif 000014
【図１３】
2011182115.tif 000015
【図１４】
2011182115.tif 000016
【図１５】
2011182115.tif 000017
【図１６】
2011182115.tif 000018
【図１７】
2011182115.tif 000019
【図１８】
2011182115.tif 000020
【図１９】
2011182115.tif 000021
【図２０】
2011182115.tif 000022
【図２１】
2011182115.tif 000023
【図２２】
2011182115.tif 000024