(57)【要約】【課題】クラスタ構成のメッセージ受信システムでメッセージの到達順位を保証する。【解決手段】コンピュータは、メッセージが到着する度にスレッドを実行する。スレッドでは、ＤＢから次順序番号を読み出し（Ｓ２）、メッセージをＤＢに記憶し（Ｓ３）、二重登録かを判別し（Ｓ４）、違う場合次順序番号とメッセージの順序番号が一致するかを判別する（Ｓ６）。一致しない場合終了し、一致する場合メッセージを送信する（Ｓ７）。ＤＢの次順序番号を１増加させ（Ｓ９）、次順序番号を順序番号として有するメッセージがＤＢに有るかを判別し（Ｓ１０）、無い場合終了し、有る場合、メッセージの読み出し（Ｓ１１）、送信（Ｓ７）、次順序番号の増加（Ｓ９）、該当メッセージの有無の判別（Ｓ１０）を、Ｓ１０で該当メッセージが無いと判別されるまで繰り返す。また、Ｓ２〜Ｓ４、Ｓ９〜Ｓ１１でＤＢの排他制御を行う。【選択図】  図４
2004177995.tif 000002
【特許請求の範囲】
【請求項１】
複数のコンピュータを含むクラスタ構成のメッセージ受信システムにおいて、メッセージ発信元からの発信順序を示す順序番号の情報を含むメッセージの到達順序を保証するためのメッセージ到達順序保証方法であって、
コンピュータが、該コンピュータへメッセージが到着する度に所定のスレッド又はプロセスを実行し、
前記スレッド又はプロセスは、
当該メッセージ受信システムからメッセージ送信先へ次に送信すべきメッセージの順序番号を示す次順序番号を記憶する第１のデータベースから次順序番号を読み出すとともに、前記到着したメッセージを所定の第２のデータベースに記憶するメッセージ記憶ステップと、
前記メッセージ記憶ステップにより同一メッセージが第２のデータベースに二重に登録されたか否かを判別するステップと、
同一メッセージが二重に登録されたと判別された場合、当該スレッド又はプロセスを終了するステップと、
同一メッセージが二重に登録されていないと判別された場合、第１のデータベースから読み出した次順序番号と、前記到着したメッセージの順序番号と、が一致するかを判別する判別ステップと、
前記判別ステップにより次順序番号と順序番号が一致しないと判別された場合、当該スレッド又はプロセスを終了するステップと、
前記判別ステップにより次順序番号と順序番号が一致すると判別された場合、前記到着したメッセージをメッセージ送信先へ送信するステップと、
第１のデータベースに記憶される次順序番号を１だけ増加させる増加ステップと、
第１のデータベースに記憶されている次順序番号を順序番号として有するメッセージが第２のデータベースに保存されているかを判別するメッセージ判別ステップと、
前記メッセージ判別ステップにより、該当するメッセージが第２のデータベースに保存されていると判別された場合、該当するメッセージを第２のデータベースから読み出すステップと、読み出したメッセージをメッセージの送信先に送信するステップと、前記増加ステップと、前記メッセージ判別ステップとを、当該メッセージ判別ステップにおいて該当するメッセージが第２のデータベースに保存されていないと判別されるまで繰り返すステップと、
前記メッセージ判別ステップにより、該当するメッセージが第２のデータベースに保存されていないと判別された場合、当該スレッド又はプロセスを終了するステップと、
少なくとも、前記メッセージ記憶ステップの開始から終了までの間と、前記増加ステップの開始から前記メッセージ判別ステップの終了までの間に、第１と第２のデータベースの排他制御を行うステップと、を含む、
ことを特徴とする到達順序保証方法。
【請求項２】
各前記コンピュータは、複数の前記スレッド又はプロセスを並列的に実行する、
ことを特徴とする請求項１に記載の到達順序保証方法。
【請求項３】
複数のコンピュータを含むクラスタ構成のメッセージ受信システムにおけるコンピュータであって、
メッセージ発信元からの発信順序を示す順序番号の情報を含む所定のメッセージの到着に応じて所定のスレッド又はプロセスを実行する手段を備え、
前記スレッド又はプロセスでは、
前記メッセージ受信システムからメッセージ送信先へ次に送信すべきメッセージの順序番号を示す次順序番号を記憶する第１のデータベースから次順序番号を読み出すとともに、前記到着したメッセージを所定の第２のデータベースに記憶するメッセージ記憶処理を行い、
前記メッセージ記憶処理により同一メッセージが第２のデータベースに二重に登録されたか否かを判別し、
同一メッセージが二重に登録されたと判別された場合、当該スレッド又はプロセスを終了し、
同一メッセージが二重に登録されていないと判別された場合、第１のデータベースから読み出した次順序番号と、前記到着したメッセージの順序番号と、が一致するかを判別する判別処理を行い、
前記判別処理により次順序番号と順序番号が一致しないと判別された場合、当該スレッド又はプロセスを終了し、
前記判別処理により次順序番号と順序番号が一致すると判別された場合、前記到着したメッセージをメッセージ送信先へ送信し、
第１のデータベースに記憶される次順序番号を１だけ増加させる増加処理を行い、
第１のデータベースに記憶されている次順序番号を順序番号として有するメッセージが第２のデータベースに保存されているかを判別するメッセージ判別処理を行い、
前記メッセージ判別処理により、該当するメッセージが第２のデータベースに保存されていると判別された場合、該当するメッセージを第２のデータベースから読み出す処理と、読み出したメッセージをメッセージの送信先に送信する処理と、前記増加処理と、前記メッセージ判別処理と、を当該メッセージ判別処理において該当メッセージが第２のデータベースに保存されていないと判別されるまで繰り返し、
前記メッセージ判別処理により、該当するメッセージが第２のデータベースに保存されていないと判別された場合、当該スレッド又はプロセスを終了し、
少なくとも、前記メッセージ記憶処理の開始から終了までの間と、前記増加処理の開始から前記メッセージ判別処理の終了までの間に、第１と第２のデータベースの排他制御を行う、
ことを特徴とするコンピュータ。
【請求項４】
複数の前記スレッド又はプロセスを並列的に実行することを特徴とする請求項３に記載のコンピュータ。
【請求項５】
請求項３又は４に記載の前記コンピュータと、前記第１と第２のデータベースと、を備えることを特徴とするメッセージ受信システム。
【請求項６】
メッセージ発信元からの発信順序を示す順序番号の情報を含むメッセージを受信するためのメッセージ受信システムを構成するコンピュータに、
当該メッセージ受信システムからメッセージ送信先へ次に送信すべきメッセージの順序番号を示す次順序番号を記憶する第１のデータベースから次順序番号を読み出すとともに、前記到着したメッセージを所定の第２のデータベースに記憶するメッセージ記憶ステップ、
前記メッセージ記憶ステップにより同一メッセージが第２のデータベースに二重に登録されたか否かを判別するステップ、
同一メッセージが二重に登録されたと判別された場合、所定の終了処理を行うステップ、
同一メッセージが二重に登録されていないと判別された場合、第１のデータベースから読み出した次順序番号と、前記到着したメッセージの順序番号と、が一致するかを判別する判別ステップ、
前記判別ステップにより次順序番号と順序番号が一致しないと判別された場合、所定の終了処理を行うステップ、
前記判別ステップにより次順序番号と順序番号が一致すると判別された場合、前記到着したメッセージをメッセージ送信先へ送信するステップ、
第１のデータベースに記憶される次順序番号を１だけ増加させる増加ステップ、
第１のデータベースに記憶されている次順序番号を順序番号として有するメッセージが第２のデータベースに保存されているかを判別するメッセージ判別ステップ、
前記メッセージ判別ステップにより、該当するメッセージが第２のデータベースに保存されていると判別された場合、該当するメッセージを第２のデータベースから読み出すステップと、読み出したメッセージをメッセージの送信先に送信するステップと、前記増加ステップと、前記メッセージ判別ステップとを、当該メッセージ判別ステップにおいて該当するメッセージが第２のデータベースに保存されていないと判別されるまで繰り返すステップ、
前記メッセージ判別ステップにより、該当するメッセージが第２のデータベースに保存されていないと判別された場合、所定の終了処理を行うステップ、
少なくとも、前記メッセージ記憶ステップの開始から終了までの間と、前記増加ステップの開始から前記メッセージ判別ステップの終了までの間に、第１と第２のデータベースの排他制御を行うステップ、
を該コンピュータにメッセージが到着する度に実行させるためのプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、インターネット上で信頼性の高いメッセージ交換を実現するための方法等に関し、特に、クラスタ構成を有するメッセージ受信システムにおけるメッセージの到達順序を保証する方法等に関する。
【０００２】
【従来の技術】
近年のインターネット技術の急速な普及により、インターネット技術を利用したビジネスを実現可能とする様々な技術が開発されている。その一例として、インターネット経由でアプリケーション同士を容易に接続可能とする「Ｗｅｂサービス」等がある。このような技術により、例えば企業間の電子商取引等が容易に実現可能となることが期待されている。
【０００３】
しかし、インターネット技術を利用したビジネスを実現可能とするためには、いくつかの問題もある。例えば、インターネットにおけるメッセージ交換は、インターネットの性質上、信頼性が低い。このため、信頼性の高いメッセージ交換の実現に対するニーズが高まっている。
【０００４】
例えば、ＸＭＬ（ｅｘｔｅｎｓｉｂｌｅ  ｍａｒｋｕｐ  ｌａｎｇｕａｇｅ）を活用した電子商取引向けの国際標準仕様ｅｂＸＭＬ（ｅｌｅｃｔｒｏｎｉｃ  ｂｕｓｉｎｅｓｓ  ＸＭＬ）がインターネット上で公開され、電子商取引における高信頼性メッセージングの要件等が記載されており、このｅｂＸＭＬ仕様に基づいて作成されたオープンソース等もインターネット上で公開されている（例えば、非特許文献１参照。）。
【０００５】
【非特許文献１】
”Ｓｙｂａｓｅ  Ｏｐｅｎ  Ｓｏｕｒｃｅ  ｆｏｒ  ｅｂＸＭＬ  Ｍｅｓｓａｇｉｎｇ  Ｔｅｃｈｎｉｃａｌ  Ｗｈｉｔｅ  Ｐａｐｅｒ”、［ｏｎｌｉｎｅ］、サイベース（Ｓｙｂａｓｅ  ｉｎｃ．）、［平成１４年１１月１１日検索］、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ｓｙｂａｓｅ．ｃｏｍ／ｄｅｔａｉｌ？ｉｄ＝１０１９１５６＞
【０００６】
【発明が解決しようとする課題】
メッセージ交換における高信頼性の要件としては、「必ず相手に１度だけ届くこと」、「決めた順序通り相手に届くこと（到達順序保証）」等がある。このうちの、「到達順序保証」については、上記のようなオープンソース等においてもサポートされていない。
【０００７】
しかし、インターネット上でのメッセージ交換では、到達するメッセージの順序がバラバラであり、多重に送られることもあることから、到達順序保証はインターネット上でのメッセージングにおいて非常に重要なものである。
【０００８】
一方、ＩＴ（Ｉｎｆｏｒｍａｔｉｏｎ  Ｔｅｃｈｎｏｌｏｇｙ）システムに柔軟かつ適切なＲＯＩ（Ｒｅｔｕｒｎ  Ｏｎ  Ｉｎｖｅｓｔｍｅｎｔ：投資対効果）が要求されており、これに応えるべくクラスタ等の分散コンピューティングが普及している。
このようなクラスタ構成を有するメッセージ受信システムにおいて、上記の到達順序保証機能をサポートするシステムは未だ実現されていない。
【０００９】
この発明は、上記実状に鑑みてなされたものであり、クラスタ構成を有するメッセージ受信システムにおいてメッセージの到達順序保証が可能なメッセージ到達順序保証方法等を提供することを目的とする。
【００１０】
【課題を解決するための手段】
上記目的を達成するため、この発明の第１の観点に係る到達順序保証方法は、複数のコンピュータを含むクラスタ構成のメッセージ受信システムにおいて、メッセージ発信元からの発信順序を示す順序番号の情報を含むメッセージの到達順序を保証するためのメッセージ到達順序保証方法であって、
各前記メッセージは、メッセージ発信元からの発信順序を示す順序番号の情報を含み、
コンピュータが、該コンピュータへメッセージが到着する度に所定のスレッド又はプロセスを実行し、
前記スレッド又はプロセスでは、
当該メッセージ受信システムからメッセージ送信先へ次に送信すべきメッセージの順序番号を示す次順序番号を記憶する第１のデータベースから次順序番号を読み出すとともに、前記到着したメッセージを所定の第２のデータベースに記憶するメッセージ記憶ステップと、
前記メッセージ記憶ステップにより同一メッセージが第２のデータベースに二重に登録されたか否かを判別するステップと、
同一メッセージが二重に登録されたと判別された場合、当該スレッド又はプロセスを終了するステップと、
同一メッセージが二重に登録されていないと判別された場合、第１のデータベースから読み出した次順序番号と、前記到着したメッセージの順序番号と、が一致するかを判別する判別ステップと、
前記判別ステップにより次順序番号と順序番号が一致しないと判別された場合、当該スレッド又はプロセスを終了するステップと、
前記判別ステップにより次順序番号と順序番号が一致すると判別された場合、前記到着したメッセージをメッセージ送信先へ送信するステップと、
第１のデータベースに記憶される次順序番号を１だけ増加させる増加ステップと、
第１のデータベースに記憶されている次順序番号を順序番号として有するメッセージが第２のデータベースに保存されているかを判別するメッセージ判別ステップと、
前記メッセージ判別ステップにより、該当するメッセージが第２のデータベースに保存されていると判別された場合、該当するメッセージを第２のデータベースから読み出すステップと、読み出したメッセージをメッセージの送信先に送信するステップと、前記増加ステップと、前記メッセージ判別ステップとを、当該メッセージ判別ステップにおいて該当するメッセージが第２のデータベースに保存されていないと判別されるまで繰り返すステップと、を実行し、
前記メッセージ判別ステップにより、該当するメッセージが第２のデータベースに保存されていないと判別された場合、当該スレッド又はプロセスを終了するステップと、
少なくとも、前記メッセージ記憶ステップの開始から終了までの間と、前記増加ステップの開始から前記メッセージ判別ステップの終了までの間に、第１と第２のデータベースの排他制御を行うステップと、を含む、
ことを特徴とする。
【００１１】
このような構成によれば、クラスタ構成を有するメッセージ受信システムにおいて、メッセージの到着順序や到着のタイミング等に拘わらず、二重到達、順番の誤配送を防止し、メッセージの到達順序を保証することができる。
【００１２】
各前記コンピュータは、複数の前記スレッド又はプロセスを並列的に実行するようにしてもよい。
これにより、システム全体のスループットを向上させることができる。
【００１３】
また、この発明の第２の観点に係るコンピュータは、
複数のコンピュータを含むクラスタ構成のメッセージ受信システムにおけるコンピュータであって、
メッセージ発信元からの発信順序を示す順序番号の情報を含む所定のメッセージの到着に応じて所定のスレッド又はプロセスを実行する手段を備え、
前記スレッド又はプロセスでは、
前記メッセージ受信システムからメッセージ送信先へ次に送信すべきメッセージの順序番号を示す次順序番号を記憶する第１のデータベースから次順序番号を読み出すとともに、前記到着したメッセージを所定の第２のデータベースに記憶するメッセージ記憶処理を行い、
前記メッセージ記憶処理により同一メッセージが第２のデータベースに二重に登録されたか否かを判別し、
同一メッセージが二重に登録されたと判別された場合、当該スレッド又はプロセスを終了し、
同一メッセージが二重に登録されていないと判別された場合、第１のデータベースから読み出した次順序番号と、前記到着したメッセージの順序番号と、が一致するかを判別する判別処理を行い、
前記判別処理により次順序番号と順序番号が一致しないと判別された場合、当該スレッド又はプロセスを終了し、
前記判別処理により次順序番号と順序番号が一致すると判別された場合、前記到着したメッセージをメッセージ送信先へ送信し、
第１のデータベースに記憶される次順序番号を１だけ増加させる増加処理を行い、
第１のデータベースに記憶されている次順序番号を順序番号として有するメッセージが第２のデータベースに保存されているかを判別するメッセージ判別処理を行い、
前記メッセージ判別処理により、該当するメッセージが第２のデータベースに保存されていると判別された場合、該当するメッセージを第２のデータベースから読み出す処理と、読み出したメッセージをメッセージの送信先に送信する処理と、前記増加処理と、前記メッセージ判別処理と、を当該メッセージ判別処理において該当メッセージが第２のデータベースに保存されていないと判別されるまで繰り返し、
前記メッセージ判別処理により、該当するメッセージが第２のデータベースに保存されていないと判別された場合、当該スレッド又はプロセスを終了し、
少なくとも、前記メッセージ記憶処理の開始から終了までの間と、前記増加処理の開始から前記メッセージ判別処理の終了までの間に、第１と第２のデータベースの排他制御を行う、
ことを特徴とする。
【００１４】
このような構成によれば、クラスタ構成を有するメッセージ受信システムにおいて、メッセージの到着順序や到着のタイミング等に拘わらず、二重到達、順番の誤配送を防止し、メッセージの到達順序を保証することができる。
【００１５】
また、複数の前記スレッド又はプロセスを並列的に実行するようにしてもよい。
これにより、システム全体のスループットを向上させることができる。
【００１６】
また、この発明の第３の観点に係るメッセージ受信システムは、
上記のコンピュータと、前記第１と第２のデータベースと、を備えることを特徴とする。
【００１７】
また、この発明の第４の観点に係るプログラムは、
メッセージ発信元からの発信順序を示す順序番号の情報を含むメッセージを受信するためのメッセージ受信システムを構成するコンピュータに、
当該メッセージ受信システムからメッセージ送信先へ次に送信すべきメッセージの順序番号を示す次順序番号を記憶する第１のデータベースから次順序番号を読み出すとともに、前記到着したメッセージを所定の第２のデータベースに記憶するメッセージ記憶ステップ、
前記メッセージ記憶ステップにより同一メッセージが第２のデータベースに二重に登録されたか否かを判別するステップ、
同一メッセージが二重に登録されたと判別された場合、所定の終了処理を行うステップ、
同一メッセージが二重に登録されていないと判別された場合、第１のデータベースから読み出した次順序番号と、前記到着したメッセージの順序番号と、が一致するかを判別する判別ステップ、
前記判別ステップにより次順序番号と順序番号が一致しないと判別された場合、所定の終了処理を行うステップ、
前記判別ステップにより次順序番号と順序番号が一致すると判別された場合、前記到着したメッセージをメッセージ送信先へ送信するステップ、
第１のデータベースに記憶される次順序番号を１だけ増加させる増加ステップ、
第１のデータベースに記憶されている次順序番号を順序番号として有するメッセージが第２のデータベースに保存されているかを判別するメッセージ判別ステップ、
前記メッセージ判別ステップにより、該当するメッセージが第２のデータベースに保存されていると判別された場合、該当するメッセージを第２のデータベースから読み出すステップと、読み出したメッセージをメッセージの送信先に送信するステップと、前記増加ステップと、前記メッセージ判別ステップとを、当該メッセージ判別ステップにおいて該当するメッセージが第２のデータベースに保存されていないと判別されるまで繰り返すステップ、
前記メッセージ判別ステップにより、該当するメッセージが第２のデータベースに保存されていないと判別された場合、所定の終了処理を行うステップ、
少なくとも、前記メッセージ記憶ステップの開始から終了までの間と、前記増加ステップの開始から前記メッセージ判別ステップの終了までの間に、第１と第２のデータベースの排他制御を行うステップ、
を該コンピュータにメッセージが到着する度に実行させる。
【００１８】
【発明の実施の形態】
以下、本発明の実施の形態に係るメッセージ受信システムを図面を参照して説明する。
【００１９】
図１は、この発明の実施の形態に係るメッセージ受信システムの構成を示す図である。図示されるように、このメッセージ受信システム１は、相互に接続された複数のコンピュータ１１等から構成されるクラスタシステムである。
また、メッセージ受信システム１はインターネットに接続可能であり、所定のネットワークにより接続されるメッセージ処理システム２とともに、サービス提供システムを構成している。
【００２０】
図１に示されるように、このメッセージ受信システム１は、ＬＡＮ（ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）等のネットワーク１０を介して相互に接続される複数のコンピュータ１１、順序番号ＤＢ（データベース）１３、メッセージＤＢ１５、を備える。
【００２１】
コンピュータ１１は、例えば図２に示すように、制御部１１１、記憶部１１２、通信制御部１１３等を備える通常のパーソナルコンピュータ、ワークステーション、サーバ等のコンピュータを含む。コンピュータ１１は、受付装置１１Ａとして機能するコンピュータと、メッセージ受信装置１１Ｂとして機能するコンピュータと、を含む。
【００２２】
受付装置１１Ａは、制御部１１１が記憶部１１２に記憶されるプログラム等を実行することにより、インターネットを介して外部のコンピュータからメッセージを受信し、受信したメッセージを各受信装置１１Ｂに割り振る処理を行う。受付装置１１Ａが外部のコンピュータから受信するメッセージは、例えば図３に示すように、メッセージヘッダ部Ｍ１と本体部Ｍ２から構成される。メッセージヘッダ部Ｍ１は、メッセージＩＤ、順序番号等の情報を含む。ここで、順序番号は、メッセージ送信元から送信される一連のメッセージにおける各メッセージの順番を表すものである。また、本体部Ｍ２は、メッセージ本体の情報を含む。なお、受付装置１１Ａがメッセージを各受信装置１１Ｂに割り振る際の判断基準は任意であり、例えば、各メッセージ受信装置１１Ｂのメッセージ受信状況等に応じて負荷を平均的に分散するようにメッセージを割り振るようにしても良い。
【００２３】
メッセージ受信装置１１Ｂは、制御部１１１が記憶部１１２に記憶されるプログラム等を実行することにより、受付装置１１Ａからメッセージを受け取る度に、所定のメッセージ受信処理（スレッド）を実行する。このメッセージ受信処理は、メッセージ受信システム１が受信したメッセージを各メッセージ内に含まれる順序番号に従ってメッセージ処理システム２に受け渡すための処理である。メッセージ受信装置１１Ｂは、マルチスレッドを利用してメッセージ受信処理を複数並列して実行する。なお、メッセージ受信処理の詳細については後述する。
【００２４】
順序番号ＤＢ１３には、メッセージ受信装置１１Ｂによるメッセージ受信処理で使用される次順序番号の情報が記憶される。次順序番号は、メッセージ受信システム１からメッセージ処理システム２に対して、次に送信されるべきメッセージの順序番号を示すものであり、各メッセージ受信装置１１Ｂにより実行される各メッセージ受信処理において参照・更新される。
【００２５】
メッセージＤＢ１５には、各メッセージ受信装置１１Ｂにより実行される各メッセージ受信処理において、メッセージ受信装置１１Ｂが受付装置１１Ａから受け取ったメッセージが保存される。
【００２６】
メッセージ処理システム２は、メッセージ受信システム１からメッセージを受信し、受信したメッセージを用いて、所定のサービス提供処理（例えば、電子商取引に関する処理等）を行う。
【００２７】
次に、メッセージ受信装置１１Ｂにおいて、メッセージの到着に応じて実行されるメッセージ受信処理の詳細について図４のフローチャートを参照して説明する。
【００２８】
制御部１１１は、順序番号ＤＢ１３、メッセージＤＢ１５に対する排他制御を行い（ステップＳ１）、順序番号ＤＢ１３に記憶されている次順序番号を読み出し（ステップＳ２）、処理対象のメッセージをメッセージＤＢ１５に記憶する（ステップＳ３）。このとき二重登録（同一メッセージが既に登録されている）か否かを判別し（ステップＳ４）、二重登録であれば、各ＤＢに対する排他制御を解除して（ステップＳ２１）処理を終了し、二重登録でない場合には処理を続行する。
【００２９】
次に、制御部１１１は、順序番号ＤＢ１３、メッセージＤＢ１５に対する排他制御を解除し（ステップＳ５）、ステップＳ２で読み出した次順序番号と、処理対象のメッセージのメッセージヘッダ部Ｍ１における順序番号と、が一致するか否かを判別する（ステップＳ６）。
この判別において、次順序番号とメッセージの順序番号が一致しないと判別された場合には、本処理を終了する。また、一致すると判別された場合には、メッセージの送信先であるメッセージ処理システム２にメッセージを送信する（ステップＳ７）。
【００３０】
次に、制御部１１１は、順序番号ＤＢ１３、メッセージＤＢ１５に対する排他制御を行うとともに（ステップＳ８）、順序番号ＤＢ１３における次順序番号の値に１を加え（ステップＳ９）、メッセージＤＢ１５を参照して、次順序番号を順序番号に有するメッセージが保存されているか否か（永続化されているか否か）を判別する（ステップＳ１０）。
【００３１】
このステップＳ１０の判別において、該当するメッセージが保存されていると判別された場合には、該当するメッセージをメッセージＤＢ１５から読み出す処理（ステップＳ１１）と、順序番号ＤＢ１３、メッセージＤＢ１５に対する排他制御を解除する処理（ステップＳ１２）と、読み出したメッセージをメッセージ処理システム２に送信する処理（ステップＳ７）と、順序番号ＤＢ１３、メッセージＤＢ１５に対する排他制御を行う処理（ステップＳ８）と、順序番号ＤＢ１３における次順序番号に１を加える処理と（ステップＳ９）と、次順序番号を順序番号に有するメッセージがメッセージＤＢ１５に保存されているか否かを判別する処理（ステップＳ１０）とを、ステップＳ１０において、該当するメッセージがメッセージＤＢ１５に保存されていないと判別されるまで、繰り返す。
【００３２】
また、ステップＳ１０で、該当するメッセージが保存されていないと判別された場合には、順序番号ＤＢ１３、メッセージＤＢ１５に対する排他制御を解除して（ステップＳ３１）、本処理を終了する。
【００３３】
なお、図４に示すように、上記メッセージ受信処理は、順序番号ＤＢ１３、メッセージＤＢ１５の排他制御の有無の観点から、各ＤＢを排他制御している処理区間である排他区間Ａ及び排他区間Ｃと、各ＤＢを排他制御していない処理区間である非排他区間Ｂと、に分けることができる。この処理区分に基づいて、本メッセージ受信システム１の動作について具体例を用いて図５、図６を参照して説明する。
【００３４】
図５に示すように、例えば、あるメッセージ発信元が本メッセージ受信システム１を含むサービス提供システムに対して、メッセージＭ１（順序番号「１」）、Ｍ２（順序番号「２」）、Ｍ３（順序番号「３」）を送信したとする。送信されたメッセージは、インターネットを介してメッセージ受信システム１における受付装置１１Ａにより受信される。ここで、メッセージの到着順序は、インターネットの性質上、発信時の順序と同一とは限らず、また、メッセージが二重に到達することもあり得る。この例では、まず、メッセージＭ２がメッセージ受信システム１において受信され、メッセージＭ２についてのメッセージ受信処理の実行中に、メッセージＭ１、Ｍ３、Ｍ２（Ｍ２は二重到達）が順次受信されたこととする。また、メッセージ受信システム１では、例えば、所定のコンピュータ１１（例えば、順序番号ＤＢ１３を制御するコンピュータ１１）が、メッセージ送信元からのメッセージ受信に先立って、順序番号ＤＢ１３における次順序番号を初期化（例えば、初期値「１」を設定する等）する。
【００３５】
受付装置１１Ａは、例えば、メッセージＭ２をメッセージ受信装置１１Ｂ１に、メッセージＭ１をメッセージ受信装置１１Ｂ２に、メッセージＭ３、Ｍ２をメッセージ受信装置１１Ｂ３に、それぞれ割り振ったこととする。
【００３６】
メッセージ受信装置１１Ｂ１は、メッセージＭ２の受信に応答してメッセージ受信処理（スレッド１）を実行する。また、メッセージ受信装置１１Ｂ２は、メッセージＭ１の受信に応答してメッセージ受信処理（スレッド２）を実行する。また、メッセージ受信装置１１Ｂ３は、メッセージＭ３の受信に応答してメッセージ受信処理（スレッド３）を実行し、メッセージＭ２の受信に応答してメッセージ受信処理（スレッド４）を実行する。
なお、この例では、スレッド１、２、３、４の順に高い優先度が付与されたことする。また、同一メッセージ受信装置１１Ｂ内で複数のスレッドが実行される場合のタイムスライスによる制御の切替等については説明の便宜上無視する。
【００３７】
図６に示すように、スレッド１の排他区間Ａの処理が実行されると、メッセージＭ２がメッセージＤＢ１５に記憶される。
次に、スレッド１の非排他区間Ｂの処理が実行されると、メッセージＭ２の順序番号「２」と順序番号ＤＢ１３における次順序番号「１」が一致しないことから、スレッド１が終了する。
【００３８】
一方、このスレッド１の非排他区間Ｂの処理の実行中に、スレッド２で実行される排他区間Ａの処理において、メッセージＭ１がメッセージＤＢ１５に記憶される。次に、スレッド２の非排他区間Ｂの処理が実行されると、メッセージＭ１の順序番号「１」と次順序番号「１」が一致することから、メッセージＭ１がメッセージ処理システム２に送信される。
【００３９】
一方、このスレッド２の非排他区間Ｂの処理の実行中に、スレッド３で実行される排他区間Ａの処理において、メッセージＭ３がメッセージＤＢ１５に記憶される。次に、スレッド３の非排他区間Ｂの処理が実行されると、メッセージＭ３の順序番号「３」と順序番号ＤＢ１３における次順序番号「１」が一致しないことから、スレッド３が終了する。
【００４０】
一方、このスレッド３の非排他区間Ｂの処理の実行中に、スレッド２により実行される排他区間Ｃの処理において、順序番号ＤＢ１３における次順序番号に「１」が加えられてその値が「２」となる。そして、順序番号「２」のメッセージ（メッセージＭ２）がメッセージＤＢ１５に保存されているため、メッセージＭ２が読み出され、非排他区間Ｂの処理（図４のステップＳ７）において、メッセージＭ２がメッセージ処理システム２に送信される。
【００４１】
一方、このスレッド３の非排他区間Ｂの処理（図４のステップＳ７）の実行中に、スレッド４で実行される排他区間Ａの処理において、メッセージＭ２がメッセージＤＢ１５に記憶される。この場合、メッセージＭ２は二重登録であるため、スレッド４が終了する。
【００４２】
そして、スレッド３の排他区間Ｃの処理において、順序番号ＤＢ１３における次順序番号「２」に１が加えられてその値が「３」となる。そして、順序番号「３」のメッセージ（メッセージＭ３）がメッセージＤＢ１５に保存されているため、メッセージＭ３が読み出され、非排他区間Ｂの処理（図４のステップＳ７）において、メッセージＭ３がメッセージ処理システム２に送信される。そして、排他区間Ｃの処理において、順序番号ＤＢ１３における次順序番号「３」に１が加えられてその値が「４」となる。この場合、順序番号「４」のメッセージはメッセージＤＢ１５に保存されていないため、スレッド３が終了する。
【００４３】
以上説明したように、本発明によれば、クラスタ構成を有するメッセージ受信システムにおいて、メッセージの到着順序や到着のタイミング等に拘わらず、二重到達、順番の誤配送を防止し、メッセージの到達順序を保証することができる。また、マルチスレッドで受信メッセージを処理できるため、システム全体のスループットを向上させることができる。
【００４４】
また、上記説明では、各メッセージ受信装置１１Ｂがマルチスレッドを利用して、同一コンピュータ内でスレッドを複数並列に稼働させていたが、例えば、マルチプロセスを利用して各メッセージ受信処理を行うようにしてもよい。
また、メッセージ処理システム２の処理内容は、電子商取引に関する処理に限定されず任意であり、インターネット等を介して外部のコンピュータから受信したメッセージを用いる種々の処理内容が適用可能である。
また、上記実施例におけるシステム構成は一例であり、これに限定されない。例えば、メッセージ処理システム２も上記クラスタシステムの一部として含むように構成してもよく、また、上記クラスタシステムが他の種々のシステムを含むように構成してもよい。
【００４５】
また、図４に示すフローチャートは一例であり、種々の変形が可能である。例えばステップＳ２からステップＳ３までを各ＤＢ１３、１５の排他制御を行う排他区間Ａとし、ステップＳ９からステップＳ１０までを排他区間Ｃとしてもよい
【００４６】
また、上記実施例では、メッセージの送信先が一つ（メッセージ処理システム２）の場合について説明しているが、複数のメッセージ送信先に対応するシステムとして実現してもよい。
この場合、例えば、メッセージにおけるメッセージヘッダ部Ｍ１はメッセージの送信先を識別するためのメッセージ送信先識別子のデータをさらに含み、また、順序番号ＤＢ１３は、例えば図７に示すような、メッセージ送信先識別子毎の次順序番号を記憶するテーブルを有する。
また、この場合、各メッセージ受信装置１１Ｂにより実行されるメッセージ受信処理（図４）では、例えば、ステップＳ２で順序番号ＤＢ１３を参照する際に、受信したメッセージに含まれるメッセージ送信先識別子をキーとして、これに対応する次順序番号を読み出し、また、ステップＳ７でメッセージを送信する際に、メッセージ送信先識別子が示す送信先にメッセージを送信し、また、ステップＳ９で次順序番号を更新する際に、受信したメッセージに含まれるメッセージ送信先識別子に対応する次順序番号の値に１を加え、また、ステップＳ１０では、受信したメッセージに含まれるメッセージ送信先識別子と、ステップＳ９で更新された次順序番号と、を有するメッセージの有無を判別する。これら以外のステップについては上述の通りでよい。
【００４７】
また、上記実施例では、各コンピュータがマルチスレッド方式を採用しているが、例えば、シングルスレッド又はシングルプロセス方式を採用してもよく、この場合にも、メッセージの到着順序や到着のタイミング等に拘わらず、二重到達、順番の誤配送を防止し、メッセージの到達順序を保証することができる。
【００４８】
なお、この発明のシステムは、専用のシステムによらず、通常のコンピュータシステムを用いて実現可能である。例えば、上述の動作を実行するためのプログラムをコンピュータ読み取り可能な記録媒体（ＦＤ、ＣＤ−ＲＯＭ、ＤＶＤ等）に格納して配布し、該プログラムをコンピュータにインストールすることにより、上述の処理を実行する受付装置１１Ａ、メッセージ受信装置１１Ｂ等を構成してもよい。また、インターネット等のネットワーク上のサーバ装置が有するディスク装置に格納しておき、例えば搬送波に重畳してコンピュータにダウンロード等するようにしてもよい。
また、上述の機能を、ＯＳが分担又はＯＳとアプリケーションの共同により実現する場合等には、ＯＳ以外の部分のみを媒体に格納して配布してもよく、また、搬送波に重畳してコンピュータにダウンロード等してもよい。
【００４９】
【発明の効果】
この発明によれば、クラスタ構成を有するメッセージ受信システムにおいて、メッセージの到着順序や到着のタイミング等に拘わらず、二重到達、順番の誤配送を防止し、メッセージの到達順序を保証することができる。
【図面の簡単な説明】
【図１】この発明の実施の形態に係るメッセージ受信システムの構成を示す図である。
【図２】図１のメッセージ受信システムで使用されるコンピュータの構成を示す図である。
【図３】メッセージのデータ構造の一例を示す図である。
【図４】メッセージ受信処理を説明するためのフローチャートである。
【図５】メッセージ受信システムの動作を具体的に説明するための図である。
【図６】メッセージ受信システムの動作を具体的に説明するための図である。
【図７】複数のメッセージ送信先へのメッセージを受信するメッセージ受信システムにおける順序番号ＤＢに記憶されるテーブルの一例を示す図である。
【符号の説明】
１                メッセージ受信システム
２                メッセージ処理システム
１０              ネットワーク
１１              コンピュータ
１１Ａ            受付装置
１１Ｂ            メッセージ受信装置
１１１            制御部
１１２            記憶部
１１３            通信制御部
１３              順序番号ＤＢ
１５              メッセージＤＢ
【図１】
2004177995.tif 000003
【図２】
2004177995.tif 000004
【図３】
2004177995.tif 000005
【図４】
2004177995.tif 000006
【図５】
2004177995.tif 000007
【図６】
2004177995.tif 000008
【図７】
2004177995.tif 000009