[go: up one dir, main page]

JP5128111B2 - メッセージに関連付けられた順序を保存するためのシステム、並びに、その方法及びコンピュータ・プログラム - Google Patents

メッセージに関連付けられた順序を保存するためのシステム、並びに、その方法及びコンピュータ・プログラム Download PDF

Info

Publication number
JP5128111B2
JP5128111B2 JP2006301466A JP2006301466A JP5128111B2 JP 5128111 B2 JP5128111 B2 JP 5128111B2 JP 2006301466 A JP2006301466 A JP 2006301466A JP 2006301466 A JP2006301466 A JP 2006301466A JP 5128111 B2 JP5128111 B2 JP 5128111B2
Authority
JP
Japan
Prior art keywords
message
consumer
sequence
sequence number
identifier
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2006301466A
Other languages
English (en)
Other versions
JP2007149081A (ja
Inventor
イアン・ウェストブルック・パーキンソン
グラハム・デレク・ウォーリス
ビセンテ・ロッセリ・スアレス
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2007149081A publication Critical patent/JP2007149081A/ja
Application granted granted Critical
Publication of JP5128111B2 publication Critical patent/JP5128111B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q10/00Administration; Management
    • G06Q10/10Office automation; Time management

Landscapes

  • Engineering & Computer Science (AREA)
  • Business, Economics & Management (AREA)
  • Strategic Management (AREA)
  • Entrepreneurship & Innovation (AREA)
  • Human Resources & Organizations (AREA)
  • Operations Research (AREA)
  • Economics (AREA)
  • Marketing (AREA)
  • Data Mining & Analysis (AREA)
  • Quality & Reliability (AREA)
  • Tourism & Hospitality (AREA)
  • Physics & Mathematics (AREA)
  • General Business, Economics & Management (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Debugging And Monitoring (AREA)
  • Computer And Data Communications (AREA)

Description

本発明は、メッセージに関連付けられた順序を保存するためのシステム、並びに、その方法及びコンピュータ・プログラムに関する。
図1を参照すると、WebSphere MQ(WebSphereはInternational Business Machines Corporationの登録商標である)のような非同期式メッセージング・システム(100)においては、送信側アプリケーション(ここでは「プロデューサ」(105)という用語で呼ばれる)は、処理のために受信側アプリケーション(ここでは「コンシューマ」(110)という用語で呼ばれる)のキュー(115)にメッセージを送信する。
非同期式メッセージング・システムを用いるときには、しばしば、プロデューサからのメッセージが順序通りに処理される必要性がある。通常、プロデューサは順序が保存されると想定し、その想定を踏まえて設計される。例えば、一組のメッセージが、データベースからの挿入、更新、削除などを表す場合に、そのメッセージが順序を無視して処理されると、結果は悲惨なことになりかねない。例えば、列の挿入動作に後続する列の削除動作が誤った順序で処理された(即ち削除動作が挿入動作の前に処理された)場合には、結果として、削除されるはずだった列が挿入されたまま残ることになる。即ち、ある数の非同期メッセージがコンシューマによって到着順に処理されねばならない場合に、メッセージm1及びメッセージm2が順次的な順序で到着するときには、コンシューマは、メッセージm1を先に処理しなければならず、m1の処理が完了して初めてm2の処理を行うことができる。
プロデューサはメッセージを作成された順に順序付けるのが必然的であり、この順序を保存するための最も一般的なソリューションは、プロデューサがそのメッセージの全てを、単一のコンシューマに関連付けられたキューに送信するように設定することである。単一のコンシューマは、キューからの全てのメッセージを、そのメッセージがそのキューに入れられた順序で処理する。
残念ながら、そうしたメッセージ・コンシューマは、シングル・ポイント障害となる。さらに、たった1つのコンシューマが用いられるのであるから、システムは規模拡大が可能にはならない。さらにまた、たった1つのコンシューマが用いられるのであるから、このソリューションはまた、異なる数のコンシューマをサポートできる動的で柔軟なメッセージング・アーキテクチャを構築する可能性を制限する。複数のコンシューマは、ロード・バランシング要件に役立つことができ、故障したコンシューマを迂回するのに利用することができるといった利点をもつ。
よって、幾つかの非同期式メッセージング・システムにおいては、スケーラビリティのために、複数のコンシューマが共有キューからのメッセージを処理することが可能である。非同期式メッセージング・システムに関連する1つの問題は、共有キューからのメッセージを巡って複数のコンシューマが競合した場合に、メッセージの処理順序を保証しないということである。図2の非同期式メッセージング・システム(200)を参照すると、2つのコンシューマ(210、220)が単一のキューでリスンする場合、一方のコンシューマが他方のコンシューマより速くメッセージを処理することがある。
例えば、コンシューマ1(210)がコンシューマ2(220)の半分の速度で実行する場合には、コンシューマ1(210)は、幾つかのメッセージを処理するのにコンシューマ2(220)の2倍の時間を取りかねない。さらにまた、コンシューマ1はコンシューマ2の存在を全く知らないことが通例である。従って、コンシューマ2(220)がメッセージm1を取り寄せて処理し、コンシューマ1(210)がm2を取り寄せ、コンシューマ1(210)がm2の処理を完了する前にコンシューマ2(220)がメッセージm3を取り寄せて処理した場合には、シーケンスm1、m2、m3は、実際には、m1、m3、m2という順序で処理される。
従来技術のソリューションである、非特許文献1においては、複数のコンシューマが共有キューからのメッセージを処理する時に用いることが可能なシステムが開示される。従来技術においては、特定の種類のメッセージが、(例えばプロデューサ、フィルタリング・アプリケーションなどにより)グローバル・ユニーク・シーケンス番号(GUS)を用いてマーク付けされる。複数のコンシューマは、最後に処理されたメッセージに関連付けられたデータ(例えばGUS、メッセージ・ペイロードなど)を格納する第1のリレーショナル・データベース、及び、シーケンスから外れたメッセージに関連付けられたデータ(例えばGUS)を格納する第2のリレーショナル・データベースへのアクセス手段を持たなければならない。よって、メッセージm1、m2、m3が、m1、m3、m2という順序で到着した場合には、m1が最初に処理されて第1のリレーショナル・データベースに挿入される。m3が受信されたときには、第1のリレーショナル・データベースに対する照会が、m3の順序は誤っており、従って、m2が受信されるまで第2のリレーショナル・データベースに挿入されると判断する。m2が受信されたときには、第1のリレーショナル・データベースに対する照会が行われて、m1が処理済みであると判断する。よって、その後にm2及びm3を処理することができる。次いで、第1のリレーショナル・データベースは、m2及びm3が処理済みであることを反映するために更新される。
従来技術のソリューションは、メッセージが転送中に誤った順序となることを許し、GUS及びリレーショナル・データベースを用いて順序を立て直せるようにする。しかしながら、メッセージ・ペイロードが格納される必要があり、これはオーバーヘッドを引き起こす。そしてまた、コンシューマがリレーショナル・データベースへのアクセス手段を共有する必要があり、このことは、リレーショナル・データベースへのアクセス手段を共有できるコンシューマの数が限られているため、オーバーヘッドを引き起こしてスケーラビリティを減少させかねない。
「A Method for Scaleable, Ordered Message Processing」、IBMによるIPCOM000020233D(2003年11月4日付でIP.comにロード済み)
幾つかの非同期式メッセージング・システムにおいては、複数のコンシューマが「クラスター化」され、各々のコンシューマは関連付けされたキューをもつ。メッセージの順序付けを保存するために、幾つかのシステムは、通常、メッセージを送信する相手である単一のコンシューマ・インスタンスをプロデューサが選択することができるという特徴を提供する。しかしながら、メッセージが、異なるクラスター化されたコンシューマのチェーンを経由して送信される場合には、メッセージ順序付け要件が犠牲にされなければならない(即ち、後から来たメッセージが先に来たメッセージを追い越すことを許し、チェーンにおける各コンシューマが各メッセージに対し動的に選択されるようにする)か、又は、動的で柔軟なメッセージング・アーキテクチャを構築する能力が犠牲になる(即ち、各要素が、メッセージが送信されるべき相手である次の要素を明示的に指定する)。
第1の態様によれば、メッセージに関連付けられた順序を保存するための非同期式メッセージング・システムであって、前記システムは送信側アプリケーション(以下、「プロデューサ」という)及び複数の受信側アプリケーション(以下、「コンシューマ」)を実行し、前記複数のコンシューマそれぞれにキューが関連付けられており、前記プロデューサは複数のメッセージを生成し、そして当該複数のメッセージを前記複数のコンシューマのうちの1つのコンシューマに関連付けられたキューに送信することができ、前記システムは、第1のシーケンス識別子及び第1のシーケンス番号を割り当てられた第1のメッセージ、前記第1のシーケンス識別子及び第2のシーケンス番号を割り当てられた第2のメッセージ、前記第1のメッセージの処理の完了に関連付けられた確認応答を受信する受信機構であって、前記第1のシーケンス識別子は、1つのプロデューサに対して一意であり、又は、1つのプロデューサ及び1つのコンシューマに対して一意であり、及び、前記シーケンス番号は、前記シーケンス識別子によって識別されたシーケンス内において一意であり、前記第2のシーケンス番号は、前記第1のシーケンス識別子が割り当てられたメッセージにおいて、前記第1のシーケンス番号を割り当てられたメッセージが処理された後に、前記第2のシーケンス番号を割り当てられたメッセージが処理されることを示す、前記受信機構と、前記第1のメッセージを処理するための第1のコンシューマを選択するように動作可能である選択要素であって、前記第1のコンシューマが前記第1のメッセージを処理する、前記選択要素と、前記第1のメッセージ又は前記第2のメッセージに割り当てられたシーケンス識別子及びシーケンス番号をストレージ要素内でロギングし且つ前記第1のコンシューマ又は第2のメッセージを処理するための前記第1のコンシューマ若しくは第2のコンシューマに関連付けられた識別子を前記ストレージ要素内でロギングし、ロギングされたデータを作成するためのロギング要素であって、前記第1のメッセージの送信に応答して、前記第1のシーケンス識別子、前記第1のシーケンス番号、及び前記第1のコンシューマに関連付けられた識別子を格納した第1のテーブルを作成し、前記第2のメッセージの送信に応答して、前記第1のテーブルを上書きして、前記第1のシーケンス番号を前記第2のシーケンス番号で更新し且つ前記第2のメッセージの処理をするためのコンシューマが前記第2のコンシューマである場合には前記第1のコンシューマに関連付けられた識別子を前記第2のコンシューマに関連付けられた識別子で更新する、前記ロギング要素と、前記第1のメッセージの処理の完了に関連付けられた前記確認応答が前記受信機構によって受信されたか否かを判断するための判断要素と(1)前記確認応答の受信、及び、(2)前記確認応答の前記受信の前に前記第2のメッセージが前記受信機構によって受信れたことを前記ロギングされたデータを使用して判断した後に、前記第2のメッセージ処理するためのコンシューマを前記ロギングされたデータを使用して選択するように前記選択要素を制御するためのコントローラとを備えている、前記システムが提供される。
前記第1のメッセージに関連付けられたデータをストレージ要素内でロギングするための且つ前記第1のエンティティに関連付けられたデータを前記ストレージ要素内でロギングするためのロギング要素を更に備えうる。前記第1のエンティティが、処理のために前記第1のメッセージの受信に応答して生成されるアウトバウンド・メッセージを第3のエンティティに転送するように動作可能であり、及び、前記ロギング要素がさらに、前記第1のメッセージに関連付けられたデータと前記アウトバウンド・メッセージに関連付けられたデータとをロギングするように動作可能でありうる。
前記ストレージ要素が永続的でありうる。前記確認応答の受信に応答して、前記ストレージ要素内のデータがパージされうる。
前記第1のエンティティが、処理のために前記第1のメッセージの受信に応答して生成されるアウトバウンド・メッセージを第3のエンティティに転送するように動作可能であり、及び、前記システムは、前記第1のメッセージに関連付けられたデータと前記アウトバウンド・メッセージに関連付けられたデータとをロギングするように動作可能であるロギング要素を更に備えうる。
前記第1のエンティティが、前記第3のエンティティからの前記アウトバウンド・メッセージの処理の完了に関連付けられた別の確認応答を受信することに応答して、前記確認応答を生成するように動作可能でありうる。
第2の態様によれば、非同期式メッセージング・システムにおいて、メッセージに関連付けられた順序を保存する方法であって、前記システムは送信側アプリケーション(以下、「プロデューサ」という)及び複数の受信側アプリケーション(以下、「コンシューマ」)を実行し、前記複数のコンシューマそれぞれにキューが関連付けられており、前記プロデューサは複数のメッセージを生成し、そして当該複数のメッセージを前記複数のコンシューマのうちの1つのコンシューマに関連付けられたキューに送信することができ、前記方法は、受信機構において、第1のシーケンス識別子及び第1のシーケンス番号を割り当てられた第1のメッセージを受信するステップであって、前記第1のシーケンス識別子は、1つのプロデューサに対して一意であり、又は、1つのプロデューサ及び1つのコンシューマに対して一意であり、及び、前記シーケンス番号は、前記シーケンス識別子によって識別されたシーケンス内において一意である、前記受信するステップと、前記第1のメッセージを処理するための第1のコンシューマを選択するステップであって、前記第1のコンシューマが前記第1のメッセージを処理する、前記選択するステップと、前記第1のメッセージ又は前記第2のメッセージに割り当てられたシーケンス識別子及びシーケンス番号をストレージ要素内でロギングし且つ前記第1のコンシューマ又は第2のメッセージを処理するための前記第1のコンシューマ若しくは第2のコンシューマに関連付けられた識別子を前記ストレージ要素内でロギングし、ロギングされたデータを作成するステップであって、前記第1のメッセージの送信に応答して、前記第1のシーケンス識別子、前記第1のシーケンス番号、及び前記第1のコンシューマに関連付けられた識別子を格納した第1のテーブルを作成するステップと、受信機構において、第1のシーケンス識別子及び第2のシーケンス番号を割り当てられた第2のメッセージを送信することに応答して、前記第1のテーブルを上書きして、前記第1のシーケンス番号を前記第2のシーケンス番号で更新し且つ前記第2のメッセージの処理をするためのコンシューマが前記第2のコンシューマである場合には前記第1のコンシューマに関連付けられた識別子を前記第2のコンシューマに関連付けられた識別子で更新するステップであって、前記第2のシーケンス番号は、前記第1のシーケンス識別子が割り当てられたメッセージにおいて、前記第1のシーケンス番号を割り当てられたメッセージが処理された後に、前記第2のシーケンス番号を割り当てられたメッセージが処理されることを示す、前記更新するステップと、前記第1のメッセージの処理の完了に関連付けられた確認応答が前記受信機構によって受信されたか否かを判断するステップと、(1)前記確認応答の受信、及び、(2)前記確認応答の前記受信の前に前記第2のメッセージが前記受信機構によって受信れたことを前記ロギングされたデータを使用して判断した後に、前記第2のメッセージ処理するためのコンシューマを前記ロギングされたデータを使用して選択するように前記選択要素を制御して、前記第2のメッセージを処理するステップと
を含む、前記方法が提供される。
前記方法は、前記第1のメッセージに関連付けられたデータをストレージ要素内でロギングするステップと、前記第1のエンティティに関連付けられたデータを前記ストレージ要素内でロギングするステップとをさらに含みうる。
前記ストレージ要素が永続的でありうる。
前記方法は、前記確認応答の受信に応答して、前記ストレージ要素内のデータをパージするステップをさらに含みうる。
前記方法は、処理のために前記第1のメッセージの受信に応答して生成されるアウトバウンド・メッセージを第3のエンティティに、前記第1のエンティティによって転送するステップと、前記第1のメッセージに関連付けられた前記データと前記アウトバウンド・メッセージに関連付けられたデータとをロギングするステップとをさらに含みうる。
前記方法は、前記第3のエンティティからの前記アウトバウンド・メッセージの処理の完了に関連付けられた別の確認応答を受信することに応答して、前記確認応答を、前記第1のエンティティによって生成するステップをさらに含みうる。
第3の態様によれば、メッセージに関連付けられた順序を保存するコンピュータ・プログラムであって、コンピュータに、上記に記載の方法の各ステップを実行させる前記コンピュータ・プログラムが提供される。
第4の態様によれば、メッセージがそれに関連付けられた順序識別子を備えており、受信機構が第1のシーケンス識別子に関連付けられた第1のメッセージを受信するように動作可能であり、選択要素が第1のメッセージを処理するために第1のエンティティを選択するように動作可能である環境で使用するための、メッセージに関連付けられた順序を保存するためのシステムであって、第1のメッセージの処理の完了に関連付けられた通知が受信機構によって受信されたか否かを判断するための判断要素と、通知の受信と通知の受信に続く受信機構による第1のシーケンス識別子に関連付けられた第2のメッセージの受信との組み合わせに応答して、第2のメッセージを処理するために第2のエンティティを選択するように選択要素を制御するコントローラと、を備えているシステムが提供される。
メッセージに関連付けられた順序は保存され、さらにまた、メッセージは転送される際に誤った順序にはならないという利点がある。順序に関連付けられたメッセージを処理するために異なるコンシューマを選択することが可能である(単一のコンシューマに送信された全ての未処理のメッセージに関連する確認応答が受信済みである場合)という利点がある。このことは、(例えば故障したコンシューマを迂回するなどの目的で)柔軟なアーキテクチャが構築されることを可能にする。
システムは、メッセージに関連付けられたデータとエンティティに関連付けられたデータとをストレージ要素内でロギングするためのロギング要素を備えていることが好ましい。ストレージ要素は永続的であることがより好ましい。或いは又、ストレージ要素は非永続的である。ストレージ要素内のデータは、上記通知の受信に応答してパージされることが更により好ましい。
1つの好ましい実施形態においては、第1のエンティティは、処理のために第1のメッセージを第3のエンティティに転送するように動作可能であり、且つ、第1のメッセージに関連付けられたデータと第3のエンティティに関連付けられたデータとをロギングするように動作可能である。第1のエンティティは、第3のエンティティから第1のメッセージの処理の完了に関連付けられた別の通知を受信することに応答して上記通知を生成するように動作可能であることが好ましい。上記システムは、順序識別子を生成するための生成機構を更に備えていることがより好ましい。
上記通知は、複数のメッセージの処理の完了に関連付けられることが好ましい。上記通知は、上記システムに関連付けられたパラメータに従って送信されることがより好ましい。上記通知は非永続的であることが更により好ましい。
1つの好ましい実施形態においては、コントローラは、上記通知の受信に先立ち、受信機構により受信された第1のシーケンス識別子に関連付けられた第3のメッセージに応答して、第3のメッセージを処理するために第1のエンティティを選択する選択要素を制御するように動作可能である。
第5の態様によれば、メッセージがそれに関連付けられたシーケンス識別子を備えており、受信機構が第1のシーケンス識別子に関連付けられた第1のメッセージを受信するように動作可能であり、選択要素が第1のメッセージを処理するために第1のエンティティを選択するように動作可能である環境で使用するための、メッセージに関連付けられた順序を保存する方法であって、第1のメッセージの処理の完了に関連付けられた通知が受信機構によって受信されたか否かを判断するステップと、上記通知の受信と、上記通知の受信に続いて受信機構により受信された第1のシーケンス識別子に関連付けられた第2のメッセージの受信との組み合わせに応答して、第2のメッセージを処理するために第2のエンティティを選択するように選択要素を制御するステップと、を含む方法が提供される。
第6の態様によれば、コンピュータ上で動作するときに上述された方法の各ステップを実行するように適合されたプログラム・コード手段を備えている、コンピュータ・プログラムが提供される。
これより本発明は、一例として、添付の図面に図示された好ましい実施形態を参照して説明される。
これより、図3及び図4を参照して、第1の実施形態が説明される。図4の第1の実施例においては、ステップ400からステップ450は、ここでは「プロデューサ(305)」と呼ばれるプロデューサ(305)に関連付けられるメイン・スレッドによって実行されることが好ましい。ステップ455からステップ480は、プロデューサ(305)と並列に処理を行う並列プロデューサ・スレッドによって実行されることが好ましい。図3においては、少なくとも1つのメッセージを(例えばイベントに応答して)生成する(ステップ400)プロデューサ(305)を含む非同期式メッセージング・システム(300)が示される。第1の実施例においては、メッセージは、データベース列に対するデータベース動作(例えば、「挿入」「更新」「削除」など)関連付けられる。メッセージ順序は、単一のプロデューサ・インスタンスによって生成されたメッセージに関して保存されることが好ましい。
システム(300)はまた、対応する複数のシステムの間でクラスター化された複数のコンシューマ、即ち、関連付けられたキュー(315)を伴うコンシューマ1(310)及び、関連付けられたキュー(325)を伴うコンシューマ2(320)を含む。コンシューマの個々のインストールは、インスタンスとして知られる(即ち、コンシューマ1は1つのインスタンスであり、コンシューマ2は1つのインスタンスである)。第1の実施形態においては、各々のコンシューマ・インスタンスは、別のコンシューマなどに転送することなしに、メッセージを処理する。
非同期式メッセージング・アプリケーションは、プロデューサ及びコンシューマ・インスタンスの各々と同一のシステム上で実行することが通例である。
第1の実施形態においては、プロデューサ(305)は、メッセージの各々に、シーケンス識別子及びシーケンス番号(ここではシーケンス番号は、シーケンス識別子によって識別されたシーケンス内において一意であり、シーケンス番号の値は時間と共に増加する)をタグ付けする(ステップ405)。1つの例においては、シーケンス識別子は、プロデューサに対して一意(例えば、シーケンス識別子がタスクに対して一意である場合)であり、そのことにより、同じシーケンス識別子を有するメッセージを1つ以上のプロデューサが生成しないようにする。別の例においては、シーケンス識別子は、プロデューサに対して一意とすると共にコンシューマに対して一意としてもよく、そのことにより、同じシーケンス識別子を有するメッセージを1つ以上のコンシューマが受信しないようにする。
第1の実施例においては、データベース列は、各々、関連付けられたシーケンス識別子を有し、プロデューサ(305)は2つのメッセージを生成する。順序要件は、従って、第1のメッセージに対してはs1m1(ここで「s1」はシーケンス識別子であり、「m1」はシーケンス番号であり、「列1を挿入する」がメッセージ・ペイロードである)、第2のメッセージに対してはs1m2(ここで「s1」はシーケンス識別子であり、「m2」はシーケンス番号であり、「列1を更新する」がメッセージ・ペイロードである)のように記述でき、s1m1はs1m2のシーケンス番号より小さいシーケンス番号をもつことから、s1m2の前に処理されねばならない。
適切なシーケンス識別子及びシーケンス番号を生成するタスクは、代替的に、メッセージング・アプリケーションか、又はプロデューサとメッセージング・アプリケーションの組み合わせによって実行されてもよい。後者の実施形態においては、プロデューサは、一意でないシーケンス識別子(例えば顧客idであり、1つ以上のプロデューサがその顧客idを用いる)を指定でき、その後メッセージング・アプリケーションがシーケンス識別子を修飾して、そのシーケンス識別子がプロデューサに対して一意となるようにすることができる。更に別の実施形態においては、複数のプロデューサが協働して、各々のプロデューサに一意であるようなシーケンス識別子を決めてもよい。
プロデューサ(305)は、第1のメッセージs1m1を送信して処理するためにコンシューマ・インスタンスを選択する選択要素を備える。或いは又、ロード・バランシング技術、可用性要件などに基づき、メッセージング・アプリケーションがコンシューマ・インスタンスを選択してもよい。
第1の実施例においては、プロデューサ(305)が、コンシューマ1(310)を選択し、コンシューマ1(310)に関連付けられたキュー(315)にs1m1を送信する(ステップ410)。プロデューサ(305)は、s1m1に関連付けられたメッセージ・データをロギングする(ステップ415)。
第1の実施例においては、シーケンス識別子(即ちs1)と、送信された最新のメッセージのシーケンス番号(即ちm1)がロギングされる。或いは又、付加的に、メッセージ・ペイロードもロギングすることができる。プロデューサ(305)はまた、コンシューマ1(310)に関連付けられたコンシューマ・データ(即ち、コンシューマ1に関連付けられた識別子であり、第1の実施例においては、識別子は「C1」である)をロギングする(ステップ415)。ログの図は、図7の表1(テーブル1)に示される。
異なるプロデューサ・インスタンスの間でメッセージ順序を保存する必要性がないことから、プロデューサに関連付けられたログは、永続的(即ちディスクに書き込まれるもの)でないことが好ましい。例えば、シーケンス識別子は、プロデューサ・インスタンスに固有のものとなる。プロデューサの1つのインスタンスが終了した(例えばクラッシュしたか又は正常に終了した)場合には、再スタートに当たって、プロデューサの新規のインスタンスが実行される。異なるプロデューサ・インスタンスの間でメッセージ順序を保存する必要性はないことから、新規のプロデューサ・インスタンスは、先行するプロデューサ・インスタンスが用いたシーケンス識別子に対し新しいシーケンス識別子を使用し、プロデューサ・インスタンスは、プロデューサ・インスタンスにわたっていかなるデータも持続させる必要がない。先行するプロデューサ・インスタンスに関連付けられたメッセージは、依然として処理される。
或いはまた、プロデューサが故障の後で復旧できるようにするために、プロデューサに関連付けられたログは、永続的なもの(即ちディスクに書き込まれるもの)であってもよい。このことは、プロデューサが順序付けを失うことなしに続行することを可能にする。プロデューサは、外部イベントに応答してメッセージを生成する場合に、この技術を用いることができる。
次に、プロデューサ(305)に関連付けられた並列プロデューサ・スレッドは、s1m1が処理されたというコンシューマ1(310)からの確認応答を待つ(ステップ455)。第1の実施例においては、特定のシーケンス番号yをもつメッセージに関する確認応答はまた、シーケンス番号y又はそれ以下の番号をもつ全てのメッセージに関しても確認応答する役割を果たす。
並列プロデューサ・スレッドは、並列に継続的に実行してもよく、又は確認応答が受信された時に呼び出されてもよいと理解されるべきである。
第1の実施例においては、並列プロデューサ・スレッドが、s1m1が処理されたというコンシューマ1(310)からの確認応答を待っている間に、プロデューサ(305)は、第1のメッセージと合致するシーケンス識別子をもつ、処理のために送信されるべきそれ以上のいずれかのメッセージが存在するかどうかを判断する(ステップ425)。処理のために送信されるべきそれ以上のメッセージが存在しないとの判断に応答して、並列プロデューサ・スレッドは、s1m1が処理されたというコンシューマ1(310)からの確認応答を待ち続ける。
第1の実施例においては、プロデューサ(305)は、処理のために送信されるべき更なるメッセージ(即ち第2のメッセージs1m2)が存在すると判断する。よって、処理のために送信されるべき更なるメッセージが存在するという判断に応答して、プロデューサ(305)は、更なるメッセージに関連付けられたシーケンス識別子(即ちs1)を判断する。プロデューサ(305)はこのシーケンス識別子を用いて、ログをチェックし(ステップ430)、合致するシーケンス識別子をもった記録があるか否かを判断する(ステップ435)。合致するシーケンス識別子をもった記録が存在しないという判断に応答して、プロデューサは、更なるメッセージをコンシューマに送信する(ステップ410)。
第1の実施例においては、プロデューサ(305)は、合致するシーケンス識別子をもった記録(即ち表1においてシーケンス識別子「s1」をもつ記録)が存在すると判断し、従って、合致するシーケンス識別子をもった記録が存在するという判断に応答して、プロデューサ(305)は、関連付けられたコンシューマ・データ(即ち「C1」)を判断する(ステップ440)。並列プロデューサ・スレッドはs1m1が処理されたというコンシューマ1(310)からの肯定通知を待っているのであるから、ログ記録はまだパージされておらず、故に、プロデューサ(305)は、合致するシーケンス識別子をもったログ記録がログの中に存在すると判断することに注意されたい。
プロデューサ(305)は、次いで、s1m2を、判断されたコンシューマ・データに関連付けられたコンシューマのキュー(即ちコンシューマ1(310)に関連付けられたキュー(315))に送信する(ステップ445)。ここでs1m1は、第2のメッセージs1m2と同じシーケンス識別子をもっており、コンシューマ1(310)は、第1のメッセージs1m1を処理したのと同じコンシューマ・インスタンスであると理解されるべきである。プロデューサ(305)は、s1m2に関連付けられたメッセージ・データをロギングする(ステップ450)。第1の実施例においては、表1に表されたシーケンス識別子フィールド中のデータ(即ちs1)は変わらないが、m2は送信された最新のメッセージのシーケンス番号であることから、シーケンス番号フィールド中のデータは上書きされ(即ち、m1はm2で上書きされ)、表1に表されたコンシューマ識別子フィールド中のデータ(即ちC1)は変わらない。
更新されたプロデューサ・ログの図は図7の表2(テーブル2)に示される。
データのロギング(ステップ450)に応答して、プロデューサ(305)は、第1のメッセージと合致するシーケンス識別子をもつ、処理のために送信されるべきそれ以上のいずれかのメッセージが存在するかどうかを判断する(ステップ425)。第1の実施例においては、プロデューサ(305)は、処理のために送信されるべきそれ以上のメッセージが存在しないと判断し、並列プロデューサ・スレッドは、s1m1及びs1m2が処理されたというコンシューマ1(310)からの確認応答を待ち続ける。
第1の実施例においては、コンシューマ1(310)は、s1m1を処理し、次いで、s1m2を処理する(ここで処理する順序は、メッセージがキュー(315)に到着した順序によって指定される)。s1m2が処理された後で、コンシューマ1(310)は、確認応答を生成して並列プロデューサ・スレッドに送信し、s1m2が処理されたことを確認応答する。第1の実施例においては、特定のシーケンス番号をもつメッセージに関する確認応答は、より小さいシーケンス番号をもつ全てのメッセージに関して確認応答する役目も果たすことから、この確認応答は、s1m1が処理されたことの確認応答でもある。
代替的に、コンシューマ・インスタンスに代わり、メッセージング・アプリケーションが、確認応答を生成し送信してもよいことが理解されるべきである。
並列プロデューサ・スレッドは、いずれかの確認応答が受信されたか否かの判断を行う(ステップ460)。いかなる確認応答も受信されない場合には、例えば、生成機構がアラートを生成し(ステップ470)、そのことにより、システム管理者が分析を実行できるようにする(例えば、システム管理者は、シーケンス識別子に関連付けられた未処理のメッセージに関連するログ記録のパージを強制することができる)。
第1の実施例においては、並列プロデューサ・スレッドは、確認応答が受信されたという判断を行う(例えば、並列プロデューサ・スレッドは、予め定められた時間の間、確認応答を待つことができる)(ステップ460)。
確認応答の受信に応答して、並列プロデューサ・スレッドは、ログをチェックし(ステップ465)、プロデューサ(305)は、シーケンス識別子に関連付けられた未処理のメッセージに関連するログ記録を「忘却」して良いか否かを判断する(ステップ475)。即ち、並列プロデューサ・スレッドは、確認応答内のシーケンス識別子及び関連付けられたシーケンス番号を、ログ記録内のシーケンス識別子データ及び関連付けられたシーケンス番号データと比較する。
送信された特定のシーケンス識別子に関連付けられた未処理のメッセージの各々について、確認応答が受信されなかった場合には、生成機構がアラートを生成する(ステップ470)。
送信された特定のシーケンス識別子に関連付けられた未処理のメッセージの各々について、確認応答が受信された場合には、並列プロデューサ・スレッドは、処理済みのメッセージのシーケンス識別子に関連付けられたログ記録(即ち、s1m2に関連付けられた(従ってs1m1に関連付けられた)表2のログ記録)をパージする(ステップ480)。
第1の実施例においては、s1m2に関する(従ってs1m1に関する)確認応答は、(表2に表された)ログに対して比較される。確認応答のシーケンス識別子は、ログ記録内のシーケンス識別子データに合致する。確認応答のシーケンス番号は、ログ記録内の最新のシーケンス番号データに合致し、よって、確認応答がm2の2より小さいシーケンス番号をもった全てのメッセージの処理も確認応答することから、確認応答はまた、m1の処理も確認応答する(即ち、m1が2より小さい数であるシーケンス番号1をもつ場合である)。
よって、並列プロデューサ・スレッドは、処理済みのメッセージのシーケンス識別子に関連付けられたログ記録(即ち、s1m2に関連付けられた(従ってs1m1に関連付けられた)表2のログ記録)をパージする(ステップ480)。
メッセージにシーケンス識別子及びシーケンス番号を割当てることは、そのメッセージに関連付けられた確認応答が識別されることを可能にする(即ち、メッセージ内のシーケンス識別子及びシーケンス番号を、確認応答内のシーケンス識別子及びシーケンス番号と比較することによって)ことが理解されるべきである。単一のコンシューマは、その単一のコンシューマのキューに受信された順序でメッセージを処理することから、コンシューマがメッセージの処理に際して順序を保証すると理解されるべきである。
次に、プロデューサ(305)は、第3のメッセージを生成し(ステップ400)、そのメッセージにシーケンス識別子及びシーケンス番号を(第1の実施例においては−s1m3)タグ付けする(ステップ405)。プロデューサ(305)は、処理のために第3のメッセージs1m3を送信するべくコンシューマ・インスタンスを選択する。第1の実施例においては、プロデューサ(305)は、コンシューマ2(320)を選択し、コンシューマ2(320)に関連付けられたキュー(325)にs1m3を送信する(ステップ410)。プロデューサ(305)は、s1m3に関連付けられたメッセージ・データをロギングし(ステップ415)、第1の実施例においては、シーケンス識別子(即ちs1)と送信された最新のメッセージのシーケンス番号(即ちm3)がロギングされる。プロデューサ(305)はまた、コンシューマ2(320)に関連付けられたコンシューマ・データ(即ち、コンシューマ2に関連付けられた識別子であり、第1の実施例においては、識別子は「C2」である)をロギングする(ステップ415)。プロデューサ・ログの図は、図7の表3(テーブル3)に示される。
次に、並列プロデューサ・スレッドは、s1m3が処理されたというコンシューマ2(320)からの確認応答を待つ(ステップ455)。第1の実施例においては、並列プロデューサ・スレッドが、s1m3が処理されたというコンシューマ2(320)からの確認応答待ちをしている間に、プロデューサ(305)は、第3のメッセージと合致するシーケンス識別子をもつ、処理のために送信されるべきそれ以上のいずれかのメッセージが存在するかどうかを判断する。第1の実施例においては、処理のために送信されるべきそれ以上のメッセージが存在しないので、並列プロデューサ・スレッドは、s1m3が上記のように処理されたというコンシューマ2(320)からの確認応答を待ち続ける(ステップ455)。
第1の実施例においては、コンシューマ2(320)は、s1m3を処理し、確認応答を生成して並列プロデューサ・スレッドに送信し、s1m3が処理されたことを確認応答する。
並列プロデューサ・スレッドは、いずれかの確認応答が受信されたか否かの判断を行う(ステップ460)。いかなる確認応答も受信されない場合には、生成機構がアラートを生成する(ステップ470)。
第1の実施例においては、並列プロデューサ・スレッドは、確認応答が受信されたという判断を行う(ステップ460)。確認応答を受信することに応答して、並列プロデューサ・スレッドは、ログをチェックし(ステップ465)、プロデューサ(305)が、上記のように、シーケンス識別子に関連付けられた未処理のメッセージに関連するログ記録を「忘却」して良いか否かを判断する(ステップ475)。
第1の実施例においては、s1m3に関する確認応答は、(表3に表された)ログに対して比較される。確認応答のシーケンス識別子は、ログ記録内のシーケンス識別子データに合致する。確認応答のシーケンス番号は、ログ記録の最新のシーケンス番号データに合致する。よって、並列プロデューサ・スレッドは、処理済みのメッセージのシーケンス識別子に関連付けられたログ記録(即ち、s1m3に関連付けられた表3のログ記録)をパージする(ステップ480)。
よって、プロデューサは、システム内の同じシーケンス識別子をもつ未処理のすべてのメッセージを、同じコンシューマ・インスタンスに送信するように設定可能である。単一のコンシューマが、該コンシューマに関連付けられたキューに到着する順序でメッセージを処理するのであるから、このことは、シーケンス内の順序が保存されることを可能にする。
さらにまた、同じコンシューマ・インスタンス(即ちC1)に送信された、同じシーケンス識別子(即ちs1)をもつ未処理のメッセージの各々(即ちm1、m2)に関する確認応答が受信された時にのみ、プロデューサ(305)は、該プロデューサがいずれかの与えられたシーケンスに関するコンシューマを既に選択済みであることを「忘却」することができる。その後、プロデューサ(305)は、次にそのシーケンス(即ちs1)内のメッセージ(即ちm3)を見た時に、新規のコンシューマ・インスタンス(即ちC2)を選択することができる。未処理のメッセージの各々に関する確認応答を全て受信する前にプロデューサ・インスタンスが故障した場合には、その未処理のメッセージは、それでも処理されるが、プロデューサ・インスタンスに確認応答が返信されることはないと理解されるべきである(なぜならば、再スタートの際のプロデューサ・インスタンスは新規のプロデューサ・インスタンスであるからである)。
よって、システム内で未処理のメッセージをもつシーケンス識別子の各々について、プロデューサからコンシューマへのルートが構築され、該ルートは、メッセージがシステム内で未処理であるあいだ再利用されるが、そのシーケンス内のメッセージがもはや処理されなくなると破壊される(そして後に再構築される可能性がある)。
よって、特定のシーケンスが未処理のメッセージをもたないときに、好ましい実施形態は、新規のルートが構築されることを可能にする。好ましい実施形態は、システム内のいずれかの故障したコンシューマを迂回し、高い可用性の維持を助けるという利点がある。さらにまた、コンシューマの1つが故障した場合には、その故障したコンシューマが故障時に処理していたシーケンス識別子に関連するメッセージのみが、引き続き、故障したコンシューマに送られることになる(但し、例えばシステム管理者が介入して、シーケンス識別子に関連付けられた未処理のメッセージに関連するログ記録のパージを強制した場合を除く)。別のシーケンス識別子に関連付けられたメッセージは、メッセージ順序要件を損なうことなしに、安全に故障ポイントを迂回することができる。
現行のコンシューマ・インスタンスがそれまでに受信したメッセージを処理した後にシーケンスを忘却する特徴は、プロデューサ(305)が、増え続けるシーケンス識別子及びそれに関連付けられたコンシューマ識別子のログを蓄積しないという利点がある。
好ましい実施形態においては、特定のシーケンス識別子に関連付けられたメッセージの全てが同じコンシューマ・インスタンスによって処理される必要はないが、特定の順序で処理されねばならないことが理解されるべきである。即ち、メッセージは、1つのシーケンス識別子に関連付けられた先行するメッセージがコンシューマ・インスタンスに送信されてはいるが、該コンシューマ・インスタンスによってまだ処理されていないときにだけ、同じコンシューマ・インスタンスに送信される。
確認応答は、処理された全てのメッセージに関して生成できることが理解されるべきである。しかしながら、確認応答の生成及び受信は、最適化することが可能である。上述されたように、1つの実施例においては、s(x)に関する単一の確認応答、m(y)は、シーケンス識別子x及びシーケンス番号y又はそれ以下の番号をもつ全てのメッセージに関して確認応答する役目を果たす。別の実施例においては、確認応答の生成を省略し、処理されたメッセージに関して一つおきに確認応答が生成されるようにしてもよい。更に別の実施例においては、確認応答の生成は遅らせることができる(例えば、より広い帯域幅が利用可能になるまで)。更に別の実施例においては、確認応答は、バッチにおける第1のメッセージを受信してからのタイムアウトにより、メッセージのバッチに関して送信してもよい。更に別の実施例においては、シーケンス識別子に関連付けられた更なるメッセージがコンシューマ・インスタンスに送られたがまだ処理されていない状態にあるか否かを判断するように、メッセージング・アプリケーションを設定してもよい。メッセージング・アプリケーションは、その後、最後の未処理メッセージに関する確認応答が生成されるまでコンシューマ・インスタンスを待ち続ける、未処理のメッセージをもったシーケンス識別子に関して生成される確認応答を、廃棄するように設定可能である。或いは又、メッセージング・アプリケーションは、全ての未処理のメッセージが処理された時にのみ、コンシューマ・インスタンスを起動して(1つ又はそれ以上の)確認応答を生成するようにしてもよい。
処理されたメッセージ毎に確認応答を生成しないようにすることによって、シーケンス識別子に関連付けられた更なるメッセージは、全ての適切な確認応答が受信されるまで別のコンシューマ・インスタンスに送信できなくなったり(また、それにより、更なるメッセージが故障したコンシューマ・インスタンスを迂回することができなくなる)、確認応答が生成されなければならない時にコンシューマ・インスタンスが利用可能でなくなる場合もあるが、この特徴は、性能を向上させ、確認応答の生成及び送信に関連するオーバーヘッドを最小化するという利点がある。
別の最適化の実施例においては、確認応答は、非永続的メッセージとすることができる。永続的メッセージ(メッセージング・システムが消失させないことが保証されている)は、ディスクに書き込まれなければならず、従って、オーバーヘッドとなる。さらにまた、永続的メッセージを処理する時には、余剰のネットワーク使用が必要になる(例えば、永続的メッセージを受信した受信者からその永続的メッセージの送信者へ確認応答を送信する必要があるかも知れない)。よって、特定のシーケンス識別子に関連付けられたメッセージに関する確認応答が消失した場合であっても、その特定のシーケンスに関連付けられた更なる(未処理ではない)メッセージは、適切な確認応答が受信されるまで、同じコンシューマ・インスタンスに送信され、以下同様である。この最適化特徴は、メッセージが散発的に生成されるようなシーケンスにおいては、更なる(未処理でない)メッセージが生成されて適切な確認応答が受信されるまで時間がかかる場合があり、従って、そのシーケンス識別子に関連するログ記録のパージを遅らせることから、好適ではないかもしれない。
これより、第2の実施形態が、図4、図5、及び図6を参照しながら説明される。図6の第2の実施例においては、ステップ600からステップ660は、ここでは「媒介体1(510)」と呼ばれる媒介体1(510)に関連付けられたメイン・スレッドによって実行されることが好ましい。ステップ665からステップ695は、媒介体1(510)と並列に処理を行う並列媒介体スレッドによって実行されることが好ましい。
図5においては、少なくとも1つのインバウンド・メッセージを(例えばイベントに応答して)生成するプロデューサ(505)を含む、非同期式メッセージング・システム(500)が示される。ここで用いる「インバウンド」という用語は、媒介体に対してインバウンドであることをいう。システム(500)はまた、対応する複数のシステムの間でクラスター化された複数の媒介体、即ち、関連付けられたキュー(515)を伴う媒介体1(510)と、関連付けられたキュー(525)を伴う媒介体2(520)とを備える。システム(500)は、また、対応する複数のシステムの間でクラスター化された複数のコンシューマ、即ち、関連付けられたキュー(535)を伴うコンシューマ1(530)及び、関連付けられたキュー(545)を伴うコンシューマ2(540)を含む。媒介体又はコンシューマの個々のインストールは、インスタンスとして知られる。
1つのタイプの媒介体は、通常、インバウンド・メッセージに応答して、1つ又はそれ以上のアウトバウンド・メッセージを生成することができ、ここでは「アウトバウンド」という用語は、コンシューマに対してアウトバウンドであることをいう。別のタイプの媒介体は、プロデューサからのインバウンド・メッセージを変換し、変換されたメッセージをコンシューマに送信することができる。例えば、メッセージ中の時刻データが英国夏時間(BST)からグリニッジ標準時(GMT)に変換される。別のタイプの媒介体は、異なるコンシューマの間でインバウンド・メッセージを送ることができる。特に複雑な媒介体は、これらの動作の全てを実行することができる。
第2の実施例においては、媒介体インスタンスは、インバウンド・メッセージを処理し、これに応答して、メッセージング・ネットワークに複数のアウトバウンド・メッセージを導入し、またこれらのアウトバウンド・メッセージをコンシューマに送ることができる。第2の実施例においては、コンシューマ・インスタンスの各々は、いかなるアウトバウンド・メッセージも別のコンシューマに転送することなく、1つ又はそれ以上のアウトバウンド・メッセージを処理する。
非同期式メッセージング・アプリケーションは、プロデューサ、媒介体、及びコンシューマのインスタンスの各々と同一のシステム上で実行動作することが通例である。
第2の実施例においては、プロデューサ(505)は2つのインバウンド・メッセージを生成し(ステップ400)、ここではインバウンド・メッセージは、データベース列に対するデータベース動作(例えば、「挿入」、「更新」、「削除」など)と関連付けられる。
プロデューサ(505)は、インバウンド・メッセージの各々に、シーケンス識別子及びシーケンス番号(ここではシーケンス番号は、シーケンス識別子によって識別されたシーケンス内において一意であり、シーケンス番号の値は時間と共に増加する)をタグ付けする(ステップ405)。
第2の実施例においては、データベース列は、各々、関連付けられたシーケンス識別子を有する。順序要件は、従って、第1のインバウンド・メッセージに対してはs1m1(ここで「s1」はシーケンス識別子であり、「m1」はシーケンス番号であり、「列1を挿入する」がメッセージ・ペイロードである)、第2のインバウンド・メッセージに対してはs1m2(ここで「s1」はシーケンス識別子であり、「m2」はシーケンス番号であり、「列1を更新する」がメッセージ・ペイロードである)のように記述でき、s1m1はs1m2のシーケンス番号より小さいシーケンス番号をもつことから、s1m2の前に処理されねばならない。
プロデューサ(505)は、処理のために第1のインバウンド・メッセージs1m1を送信するべく媒介体インスタンスを選択するための選択要素を備える。或いは又、ロード・バランシング技術、可用性要件などに基づき、メッセージング・アプリケーションが媒介体インスタンスを選択してもよい。
第2の実施例においては、プロデューサ(505)は、媒介体1(510)を選択し、媒介体1(510)に関連付けられたキュー(515)にs1m1を送信する(ステップ410)。プロデューサ(505)は、s1m1に関連付けられたメッセージ・データをロギングし(ステップ415)、第2の実施例においては、シーケンス識別子(即ちs1)と送信された最新のインバウンド・メッセージのシーケンス番号(即ちm1)がロギングされる。プロデューサ(505)はまた、媒介体1(510)に関連付けられた媒介体データ(即ち、媒介体1に関連付けられた識別子であり、第2の実施例においては、識別子は「I1」である)をロギングする(ステップ415)。ログの図は、図8の表4(テーブル4)に示される。
プロデューサに関連付けられたログは、永続的(即ちディスクに書き込まれるもの)ではないことが好ましい。或いは又、プロデューサに関連付けられたログは永続的(即ちディスクに書き込まれるもの)であってもよい。
プロデューサ(505)に関連付けられた並列プロデューサ・スレッドは、s1m1が処理されたという媒介体1(510)からの確認応答を待つ(ステップ455)。
図6を参照すると、インバウンド・メッセージs1m1の受信(ステップ600)に応答して、媒介体1(510)は、2つのアウトバウンド・メッセージを生成する(ステップ605)。媒介体1(510)は、インバウンド・シーケンス識別子及びそれに関連するインバウンド・シーケンス番号を、アウトバウンド・シーケンス識別子及び少なくとも1つの関連するアウトバウンド・シーケンス番号とマッピングする。
第2の実施例においては、媒介体1(510)は、アウトバウンド・メッセージの各々に、インバウンド・シーケンス識別子に関連付けられたアウトバウンド・シーケンス識別子をタグ付けする(ステップ610)。或いは又、アウトバウンド・シーケンス識別子は、インバウンド・シーケンス識別子と同一であってもよい。媒介体1(510)は、アウトバウンド・メッセージの各々に、インバウンド・シーケンス番号に関連付けられたアウトバウンド・シーケンス番号をタグ付けする(ステップ610)。アウトバウンド・シーケンス番号は、アウトバウンド・シーケンス識別子によって識別されたシーケンス内において一意であり、アウトバウンド・シーケンス番号の値は時間と共に増加する。
第2の実施例においては、第1のインバウンド・メッセージs1m1に対して、第1のアウトバウンド・メッセージs10m1が生成され(ここで「s10」はアウトバウンド・シーケンス識別子であり、「m1」はアウトバウンド・シーケンス番号であり、「データベースAに行く」がメッセージ・ペイロードである)、第2のアウトバウンド・メッセージs10m2が生成される(ここで「s10」はアウトバウンド・シーケンス識別子であり、「m2」はアウトバウンド・シーケンス番号であり、「列100を挿入する」がメッセージ・ペイロードである)。s10m1はs10m2のアウトバウンド・シーケンス番号より小さいアウトバウンド・シーケンス番号をもつことから、s10m2の前に処理されねばならない。
媒介体1(510)は、処理のために第1及び第2のアウトバウンド・メッセージを送信するためのコンシューマ・インスタンスを選択する選択要素を備える。或いは又、ロード・バランシング技術、可用性要件などに基づき、メッセージング・アプリケーションがコンシューマ・インスタンスを選択してもよい。
第2の実施例においては、媒介体1(510)は、アウトバウンド・メッセージ(即ちs10m1及びs10m2)を処理するためにコンシューマ1(530)を選択し、コンシューマ1(530)に関連付けられたキュー(535)にs10m1及びs10m2を送信する(ステップ615)。
媒介体1(510)は、s1m1に関連付けられたメッセージ・データを強制的にロギングする(ステップ620)。第2の実施例においては、媒介体1(510)は、第1のインバウンド・メッセージのシーケンス識別子(即ちs1)と、第1及び第2のアウトバウンド・メッセージのシーケンス識別子(即ちs10)と、送信された最新のインバウンド・メッセージのインバウンド・シーケンス番号(即ちm1)と、第1のインバウンド・メッセージを生成したプロデューサに関連するプロデューサ・データ(例えば、プロデューサ(505に関連付けられた識別子であり、第2の実施例においては、識別子は「P1」である)と、送信された最新のアウトバウンド・メッセージのアウトバウンド・シーケンス番号(即ちm2)と、アウトバウンド・メッセージを処理しているコンシューマに関連付けられたコンシューマ・データ(例えば、コンシューマ1(530)に関連付けられた識別子であり、第2の実施例においては、識別子は「C1」である)をロギングする。ログの図は、図9の表5(テーブル5)に示される。
媒介体に関連付けられたログは、媒介体のインスタンスにわたっても永続的である(即ち、ディスクに書込まれる)。このことは、故障の際には、媒介体は、メッセージが処理されること、及びメッセージが正しい順序で処理されることを保証する必要があるからである。
例えば、媒介体が、特定のシーケンス識別子に関連付けられた第1のメッセージを選択されたコンシューマに転送し、その後クラッシュする。コンシューマは、まだ第1のメッセージを処理していない(従って、コンシューマはまだ確認応答を送信していない)。媒介体が回復し、次いで特定のシーケンス識別子に関連付けられた第2のメッセージを受信する。コンシューマはまだ第1のメッセージの処理を確認応答していないので、媒介体は、第2のメッセージを同じ選択されたコンシューマに転送しなければならない(その選択は、媒介体の先行するインスタンスの間に成されたものではあるが)。ログは、媒介体のインスタンスにわたって、選択動作に関連付けられたデータを格納するために用いられる。
媒介体は、再実行した時に、(上述されたように再実行に際して新規のシーケンス識別子を使用できるプロデューサとは異なり)新規のシーケンス識別子を使用しない。
並列媒介体スレッドは、s10m1及びs10m2が処理されたというコンシューマ1(530)からの確認応答を待つ(ステップ665)。
図4を参照すると、第2の実施例においては、並列プロデューサ・スレッドが、s1m1が処理されたという媒介体1(510)からの確認応答待ちをしている間に、プロデューサ(505)は、第1のインバウンド・メッセージと合致するシーケンス識別子をもつ、処理のために送信されるべきそれ以上のいずれかのインバウンド・メッセージが存在するかどうかを判断する(ステップ425)。処理のために送信されるべきそれ以上のインバウンド・メッセージが存在しないとの判断に応答して、並列プロデューサ・スレッドは、s1m1が処理されたという媒介体1(510)からの確認応答待ちを続行する(455)。
第2の実施例においては、プロデューサ(505)は、処理のために送信されるべき更なるインバウンド・メッセージ(即ち第2のインバウンド・メッセージs1m2)が存在すると判断し、よって、処理のために送信されるべき更なるインバウンド・メッセージが存在するという判断に応答して、プロデューサ(505)は、第2のインバウンド・メッセージに関連付けられたシーケンス識別子(即ちs1)を判断する。プロデューサ(505)はシーケンス識別子を用いて、ログをチェックし(ステップ430)、合致するシーケンス識別子をもった記録があるか否かを判断する(ステップ435)。合致するシーケンス識別子をもった記録が存在しないという判断に応答して、プロデューサ(505)は、更なるメッセージをコンシューマに送信する(ステップ410)。
第2の実施例においては、プロデューサ(505)は、合致するシーケンス識別子をもった記録(即ち表4においてシーケンス識別子「s1」をもつ記録)が存在すると判断し、従って、合致するシーケンス識別子をもった記録が存在するという判断に応答して、プロデューサ(505)は関連付けられた媒介体データ(即ち「I1」)を判断する(ステップ440)。並列プロデューサ・スレッドはs1m1が処理されたという媒介体1(510)からの確認応答を待っているのであるから、ログ記録はまだパージされておらず、故に、プロデューサ(505)は、合致するシーケンス識別子をもったログ記録がログの中に存在すると判断していることに注意されたい。
プロデューサ(505)は、次いで、s1m2を、判断された媒介体データに関連付けられた媒介体のキュー(即ち媒介体1(510)に関連付けられたキュー(515))に送信する(ステップ445)。ここでs1m1は、第2のインバウンド・メッセージs1m2と同じシーケンス識別子をもっており、媒介体1(510)は、第1のインバウンド・メッセージs1m1を処理したのと同じ媒介体インスタンスであると理解されるべきである。
プロデューサ(505)は、s1m2に関連付けられたメッセージ・データをロギングする(ステップ450)。第2の実施例においては、表4に表されたシーケンス識別子フィールド中のデータ(即ちs1)は同じままであり、m2は送信された最新のインバウンド・メッセージのシーケンス番号であることから、シーケンス番号フィールド中のデータは上書きされ(即ち、m1はm2で上書きされる)、表4に表された媒介体識別子フィールド中のデータ(即ちI1)は同じままである。更新されたプロデューサ・ログの図は図8の表6(テーブル6)に示される。
データのロギング(ステップ450)に応答して、プロデューサ(505)は、第1のインバウンド・メッセージと合致するシーケンス識別子をもつ、処理のために送信されるべきそれ以上のいずれかのインバウンド・メッセージが存在するかどうかを判断する(ステップ425)。第2の実施例においては、プロデューサ(505)は、処理のために送信されるべきそれ以上のインバウンド・メッセージが存在しないと判断し、並列プロデューサ・スレッドは、s1m1及びs1m2が処理されたという媒介体1(510)からの確認応答待ちを続行する(ステップ455)。
図6を参照すると、並列媒介体スレッドが、s10m1及びs10m2が処理されたというコンシューマ1(530)からの確認応答待ちをしている間に、媒介体1(510)は、第1のインバウンド・メッセージと合致するシーケンス識別子(即ちs1m1)をもつ、処理のために送信されるべきそれ以上のいずれかのインバウンド・メッセージが存在するかどうかを判断する(ステップ625)。処理のために送信されるべきそれ以上のインバウンド・メッセージが存在しないとの判断に応答して、並列媒介体スレッドは、s10m1及びs10m2が処理されたというコンシューマ1(530)からの確認応答待ちを続行する(ステップ630)。
第2の実施例においては、媒介体1(510)は、処理のために送信されるべき更なるインバウンド・メッセージ(即ち第2のインバウンド・メッセージs1m2)がキュー(515)に存在すると判断する。よって、処理のために送信されるべき更なるインバウンド・メッセージが存在するという判断に応答して、媒介体1(510)は、第2のインバウンド・メッセージに関連付けられたシーケンス識別子(即ちs1)を判断する。媒介体1(510)は、このシーケンス識別子を用いてログをチェックし(ステップ630)、合致するシーケンス識別子をもった記録があるか否かを判断する(ステップ635)。合致するシーケンス識別子をもった記録が存在しないという判断に応答して、媒介体1(510)は、更なるインバウンド・メッセージをコンシューマに送信する(ステップ615)。
第2の実施例においては、媒介体1(510)は、合致するシーケンス識別子をもった記録(即ち表5においてシーケンス識別子「s1」をもった記録)が存在すると判断し、従って、合致するシーケンス識別子をもった記録が存在するという判断に応答して、媒介体1(510)は、関連付けられたコンシューマ・データ(即ち「C1」)を判断する(ステップ640)。
並列媒介体スレッドはs10m1及びs10m2が処理されたというコンシューマ1(530)からの確認応答を待っているのであるから、ログ記録はまだパージされておらず、故に、媒介体1(510)は、合致するシーケンス識別子をもったログ記録がログの中に存在すると判断することに注意されたい。
s1m2の受信に応答して、媒介体1(510)は、2つのアウトバウンド・メッセージを生成する(ステップ645)。媒介体1(510)は、インバウンド・シーケンス識別子及びそれに関連付けられたインバウンド・シーケンス番号を、アウトバウンド・シーケンス識別子及び少なくとも1つの関連付けられたアウトバウンド・シーケンス番号とマッピングする。
第1の実施例においては、媒介体1(510)は、アウトバウンド・メッセージの各々に、インバウンド・シーケンス識別子に関連付けられたアウトバウンド・シーケンス識別子及びインバウンド・シーケンス番号に関連付けられたアウトバウンド・シーケンス番号をタグ付けする(ステップ650)。アウトバウンド・シーケンス番号は、アウトバウンド・シーケンス識別子によって識別されたシーケンス内において一意であり、アウトバウンド・シーケンス番号の値は時間と共に増加する。
第2の実施例においては、第2のインバウンド・メッセージs1m2に対して、第3のアウトバウンド・メッセージs10m3が生成され(ここで「s10」はシーケンス識別子であり、「m3」はシーケンス番号であり、「データベースBに行く」がメッセージ・ペイロードである)、第4の更なるメッセージs10m4が生成される(ここで「s10」はシーケンス識別子であり、「m4」はシーケンス番号であり、「列75を更新する」がメッセージ・ペイロードである)。s10m3はs10m4のシーケンス番号より小さいシーケンス番号をもつことから、s10m4の前に処理されねばならない。さらにまた、順序を保存するために、第2のインバウンド・メッセージに関連付けられた第3のアウトバウンド・メッセージのシーケンス番号の値(即ちs10m3の3)は、第1のインバウンド・メッセージに関連付けられた第2のアウトバウンド・メッセージのシーケンス番号の値(即ちs10m2の2)より大きくなければならない。
次いで、媒介体1(510)は、s10m3及びs10m4を、判断されたコンシューマ・データに関連付けられたコンシューマのキュー(即ち、コンシューマ1(530)に関連付けられたキュー(535))に送信する(ステップ655)。コンシューマ1(530)は、第1及び第2のアウトバウンド・メッセージ(即ちs10m1及びs10m2)を処理したのと同じコンシューマ・インスタンスであり、ここでs10m1及びs10m2は、第3のアウトバウンド・メッセージs10m3及び第4のアウトバウンド・メッセージs10m4と同じシーケンス識別子をもっていることが理解されるべきである。
媒介体1(510)は、s1m2に関連付けられたメッセージ・データを強制的にロギングする(ステップ660)。第2の実施例においては、媒介体1(510)は、第2のインバウンド・メッセージのシーケンス識別子(即ちs1)と、第3及び第4のアウトバウンド・メッセージのシーケンス識別子(即ちs10)と、送信された最新のインバウンド・メッセージのインバウンド・シーケンス番号(即ちm2)と、第2のインバウンド・メッセージを生成したプロデューサに関連するプロデューサ・データ(例えば、プロデューサ(505に関連付けられた識別子であり、第2の実施例においては、識別子は「P1」である)と、送信された最新のアウトバウンド・メッセージのアウトバウンド・シーケンス番号(即ちm4)と、アウトバウンド・メッセージを処理しているコンシューマに関連付けられたコンシューマ・データ(例えば、コンシューマ1(530)に関連付けられた識別子であり、第2の実施例においては、識別子は「C1」である)をロギングする。ログの図は、図9の表7(テーブル7)に示される。
データのロギング(ステップ660)に応答して、媒介体1(510)は、第1のインバウンド・メッセージ(即ちs1m1)と合致するシーケンス識別子をもつ、処理のために送信されるべきそれ以上のいずれかの更なるメッセージが存在するかどうかを判断する(ステップ625)。第2の実施例においては、媒介体1(510)は、処理のために送信されるべきそれ以上のメッセージが存在しないと判断し、並列媒介体スレッドは、s10m1、s10m2、s10m3、及びs10m4が処理されたというコンシューマ1(530)からの確認応答待ちを続行する(ステップ665)。
第2の実施例においては、コンシューマ1(530)は、s10m1、s10m2、s10m3、及びs10m4を処理する(ここで処理する順序は、メッセージがキュー(535)に到着した順序によって指定される)。s10m4が処理された後で、コンシューマ1(530)は、確認応答を生成して並列媒介体スレッドに送信し、s10m4が処理されたことを確認応答する。第2の実施例においては特定のシーケンス番号をもつメッセージに関する確認応答は、より小さいシーケンス番号をもつ全てのメッセージを確認応答する役目も果たすことから、この確認応答は、s10m1、s10m2、及びs10m3が処理されたことの確認応答でもある。代替的に、コンシューマ・インスタンスに代わり、メッセージング・アプリケーションが、確認応答を生成し送信してもよいと理解されるべきである。
並列媒介体スレッドは、いずれかの確認応答が受信されたか否かの判断を行う(ステップ670)。いかなる確認応答も受信されない場合には、生成機構がアラートを生成する(ステップ695)。
第2の実施例においては、並列媒介体スレッドは、確認応答が受信されたという判断を行う(例えば、並列媒介体スレッドは、予め定められた時間の間、確認応答を待つことができる)(ステップ670)。
確認応答の受信に応答して、並列媒介体スレッドは、ログをチェックし(ステップ675)、1つ又はそれ以上のインバウンド・メッセージが処理されたことを確認応答する確認応答が、プロデューサ(505)に送信されても良いか否かを判断する(ステップ680)。
即ち、並列媒介体スレッドは、確認応答内のシーケンス識別子及び関連付けられたシーケンス番号を、ログ記録内のシーケンス識別子データ及び関連付けられたシーケンス番号データと比較する。比較することに応答して、並列媒介体スレッドが、送信された特定のシーケンス識別子に関連付けられた未処理のアウトバウンド・メッセージの各々について、確認応答が受信されていないと判断した場合には、生成機構がアラートを生成する(ステップ695)。
第2の実施例においては、並列媒介体スレッドは、s10m4に関する確認応答を、(表7に表された)ログに対して比較する。確認応答のシーケンス識別子は、ログ記録内のアウトバウンド・シーケンス識別子データに合致する。確認応答のシーケンス番号は、ログ記録内の最新のアウトバウンド・シーケンス番号データに合致し、よって、確認応答がm4の4より小さいシーケンス番号をもった全てのメッセージの処理も確認応答することから、確認応答はまた、s10m1、s10m2、及びs10m3の処理も確認応答する。
よって、比較することに応答して、並列媒介体スレッドは、送信された特定のシーケンス識別子に関連付けられた未処理のアウトバウンド・メッセージの各々に関する確認応答が受信されたと判断する。よって、並列媒介体スレッドは、プロデューサ(505)によって生成された関連する第1のインバウンド・メッセージ即ちs1m1及び第2のインバウンド・メッセージ即ちs1m2に関する確認応答を生成する(ステップ685)。具体的には、並列媒介体スレッドは、s1m2に関する確認応答(これは、m2の2より小さいシーケンス番号をもった全てのメッセージの処理も確認応答する役目を果たし、従って、この確認応答はまた、s1m1の処理も確認応答する)を生成する(ステップ685)。
並列媒介体スレッドは、プロデューサ(505)に確認応答を送信する(ステップ685)。代替的に、媒介体インスタンスに代わり、メッセージング・アプリケーションが確認応答を生成し送信してもよいと理解されるべきである。
送信された特定のシーケンス識別子に関連付けられた未処理のアウトバウンド・メッセージの各々に関連する確認応答が受信されたのであるから、並列媒介体スレッドは、処理済みのアウトバウンド・メッセージのシーケンス識別子に関連するログ記録(即ちs10m4に関連付けられた(従ってs10m1、s10m2、及びs10m3iに関連付けられた)表7のログ記録)をパージする(ステップ690)。よって、媒介体は、それがいずれかの与えられたシーケンスに関するコンシューマを選択済みであることを「忘却」することができる。その後、媒介体は、次にそのシーケンスの中にメッセージを見た時には、新規のコンシューマ・インスタンスを選択することができる。
図4を参照すると、並列プロデューサ・スレッドは、いずれかの確認応答が受信されたか否かの判断を行う(ステップ460)。いかなる確認応答も受信されない場合には、生成機構がアラートを生成する(ステップ470)。
第2の実施例においては、並列プロデューサ・スレッドは、確認応答が受信されたという判断を行う(ステップ460)。確認応答の受信に応答して、並列プロデューサ・スレッドは、上述されたように、ログをチェックし(ステップ465)、プロデューサ(305)が、シーケンス識別子に関連付けられた未処理のメッセージに関連するログ記録を「忘却」して良いか否かを判断する(ステップ475)。
第2の実施例においては、s1m2に関する(従ってs1m1に関する)確認応答は、(表6に表された)ログに対して比較される。確認応答のシーケンス識別子は、ログ記録内のシーケンス識別子データに合致する。確認応答のシーケンス番号は、ログ記録内の最新のシーケンス番号データに合致し、よって、確認応答がm2の2より小さいシーケンス番号をもった全てのメッセージの処理も確認応答することから、確認応答はまた、m1の処理も確認応答する(即ち、m1が2より小さいシーケンス番号1)。
よって、並列プロデューサ・スレッドは、処理済みのメッセージのシーケンス識別子に関連付けられたログ記録(即ち、s1m2に関連付けられた(従ってs1m1に関連付けられた)表6のログ記録)をパージする(ステップ480)。
よって、プロデューサは、システム内の同じシーケンス識別子をもつ未処理のメッセージを、全て、同じ媒介体インスタンスに送信するように設定可能である。単一の媒介体が、それに関連付けられたキューに到着する順序でメッセージを処理するのであるから、このことは、シーケンス内において順序が保存されることを可能にする。さらにまた、同じ媒介体インスタンス(即ちI1)に送信された、同じシーケンス識別子(即ちs1)をもつ未処理のメッセージの各々(即ちm1、m2)に関する確認応答が受信された時にのみ、プロデューサは、それがいずれかの与えられたシーケンスのための媒介体を既に選択済みであることを「忘却」することができる。その後、プロデューサ(505)は、次にそのシーケンスの中にメッセージを見た時には、新規の媒介体インスタンスを選択することができる。
このことは媒介体にもあてはまり、媒介体は、システム内の同じシーケンス識別子をもつ未処理のアウトバウンド・メッセージを全て、同じコンシューマ・インスタンスに送信するように設定可能である。さらにまた、同じコンシューマ・インスタンス(即ちC1)に送信された、同じシーケンス識別子(即ちs10)をもつ未処理のアウトバウンド・メッセージの各々(即ちm1、m2、m3、及びm4)に関する確認応答が受信された時にのみ、媒介体は、それがいずれかの与えられたシーケンスに関するコンシューマを既に選択済みであることを「忘却」することができる。その後、媒介体は、次にそのシーケンスの中にメッセージを見た時には、新規のコンシューマ・インスタンスを選択することができる。
コンシューマとの関連で上述された確認応答の生成及び受信の最適化は、媒介体についてもあてはまることが理解されるべきである。
本発明はまた、複数のコンシューマ・インスタンス又は複数の媒介体インスタンスが単一の物理コンピュータ・システム上に常駐するシステムにおいても、利用可能であることが理解されるべきである。このようなシステムは、処理がメモリ内で起こることから、通信がより高速であるという利点がある。この実施例においては、ディスパッチャが、シーケンス識別子に関連付けられたメッセージを送る相手であるメモリ内のコンシューマ・インスタンス又は媒介体インスタンスを選択することができ、メッセージ・データ及びコンシューマ・データ又は媒介体データをロギングすることができ、コンシューマ・インスタンス又は媒介体インスタンスからの確認応答を受信することができる。ディスパッチャは、コンシューマ・インスタンス又は媒介体インスタンスと同じ物理コンピュータ・システム上に常駐してもよく、又は異なる物理コンピュータ・システム上に常駐してもよいことが理解されるべきである。
本発明は、複数の媒介体(クラスター)に規模拡大が可能であることが理解されるべきである。例えば、第1の媒介体クラスターは、メッセージを変換し、そのメッセージを第2の媒介体クラスターに送信することができる。第2の媒介体クラスターは、そのメッセージに関連付けられたデータをロギングし、そのメッセージをコンシューマに伝送することができる。
プロデューサ及び単一のコンシューマ・インスタンスのブロック図である。 プロデューサ及び複数のコンシューマ・インスタンスのブロック図である。 プロデューサ及び複数のコンシューマ・インスタンスのより詳細なブロック図である。 プロデューサによって実行されるプロセスに関わる動作ステップを示すフローチャートである。 プロデューサ、複数の媒介体インスタンス、及び複数のコンシューマ・インスタンスのブロック図である。 媒介体によって実行されるプロセスに関わる動作ステップを示すフローチャートである。 プロデューサのログの図である。 プロデューサのログの図である。 媒介体のログの図である。
305:プロデューサ
315:キュー
310:コンシューマ1
325:キュー
320:コンシューマ2

Claims (14)

  1. メッセージに関連付けられた順序を保存するための非同期式メッセージング・システムであって、前記システムは送信側アプリケーション(以下、「プロデューサ」という)及び複数の受信側アプリケーション(以下、「コンシューマ」)を実行し、前記複数のコンシューマそれぞれにキューが関連付けられており、前記プロデューサは複数のメッセージを生成し、そして当該複数のメッセージを前記複数のコンシューマのうちの1つのコンシューマに関連付けられたキューに送信することができ、
    前記システムは、
    第1のシーケンス識別子及び第1のシーケンス番号を割り当てられた第1のメッセージ、前記第1のシーケンス識別子及び第2のシーケンス番号を割り当てられた第2のメッセージ、前記第1のメッセージの処理の完了に関連付けられた確認応答を受信する受信機構であって、前記第1のシーケンス識別子は、1つのプロデューサに対して一意であり、又は、1つのプロデューサ及び1つのコンシューマに対して一意であり、及び、前記シーケンス番号は、前記シーケンス識別子によって識別されたシーケンス内において一意であり、前記第2のシーケンス番号は、前記第1のシーケンス識別子が割り当てられたメッセージにおいて、前記第1のシーケンス番号を割り当てられたメッセージが処理された後に、前記第2のシーケンス番号を割り当てられたメッセージが処理されることを示す、前記受信機構と、
    前記第1のメッセージを処理するための第1のコンシューマを選択するように動作可能である選択要素であって、前記第1のコンシューマが前記第1のメッセージを処理する、前記選択要素と、
    前記第1のメッセージ又は前記第2のメッセージに割り当てられたシーケンス識別子及びシーケンス番号をストレージ要素内でロギングし且つ前記第1のコンシューマ又は第2のメッセージを処理するための前記第1のコンシューマ若しくは第2のコンシューマに関連付けられた識別子を前記ストレージ要素内でロギングし、ロギングされたデータを作成するためのロギング要素であって、前記第1のメッセージの送信に応答して、前記第1のシーケンス識別子、前記第1のシーケンス番号、及び前記第1のコンシューマに関連付けられた識別子を格納した第1のテーブルを作成し、前記第2のメッセージの送信に応答して、前記第1のテーブルを上書きして、前記第1のシーケンス番号を前記第2のシーケンス番号で更新し且つ前記第2のメッセージの処理をするためのコンシューマが前記第2のコンシューマである場合には前記第1のコンシューマに関連付けられた識別子を前記第2のコンシューマに関連付けられた識別子で更新する、前記ロギング要素と、
    前記第1のメッセージの処理の完了に関連付けられた前記確認応答が前記受信機構によって受信されたか否かを判断するための判断要素と
    (1)前記確認応答の受信、及び、(2)前記確認応答の前記受信の前に前記第2のメッセージが前記受信機構によって受信れたことを前記ロギングされたデータを使用して判断した後に、前記第2のメッセージ処理するためのコンシューマを前記ロギングされたデータを使用して選択するように前記選択要素を制御するためのコントローラと
    を備えている、前記システム。
  2. 前記第1のコンシューマが第1の媒介体であり、
    前記第2のコンシューマが第2の媒介体であり、
    前記第1の媒介体が、前記第1のメッセージ(以下、第1のインバウンド・メッセージという)の受信に応答して第1のアウトバウンド・メッセージを生成し、前記第1のアウトバウンド・メッセージには、当該第1のアウトバウンド・メッセージについての、前記第1のシーケンス識別子に関連付けられた第2のシーケンス識別子及び第3のシーケンス番号が割り当てられており、
    前記ロギング要素が、前記第1のインバウンド・メッセージの送信に応答して、前記第1のシーケンス識別子、前記第1のシーケンス番号、及び前記第1の媒介体に関連付けられた識別子を格納した第2のテーブルを作成し、そして、前記第2のインバウンド・メッセージの送信に応答して、前記第2のテーブルを上書きして、前記第1のシーケンス番号を前記第2のシーケンス番号で更新する、
    請求項1に記載のシステム。
  3. 前記ロギング要素が、さらに前記第2のメッセージを転送するための媒介体が第2の媒介体である場合には前記第1の媒介体に関連付けられた識別子を前記第2の媒介体に関連付けられた識別子で更新する、請求項2に記載のシステム。
  4. 前記第1の媒介体又は前記第2の媒介体が、前記第2のメッセージ(以下、第2のインバウンド・メッセージという)の受信に応答して第2のアウトバウンド・メッセージを生成し、前記第2のアウトバウンド・メッセージには、当該第2のアウトバウンド・メッセージについての、前記第1のシーケンス識別子に関連付けられた前記第2のシーケンス識別子及び第4のシーケンス番号が割り当てられており、前記第4のシーケンス番号は、前記第2のシーケンス識別子が割り当てられたメッセージにおいて、前記第3のシーケンス番号を割り当てられたメッセージが処理された後に、前記第4のシーケンス番号を割り当てられたメッセージが処理されることを示す、
    請求項2又は3に記載のシステム。
  5. 前記第1の媒介体が、前記第1のアウトバウンド・メッセージを第3のコンシューマに関連付けられたキューに転送するように動作可能であり、
    前記ロギング要素が、前記第1のアウトバウンド・メッセージの送信に応答して、前記第1のインバウンド・メッセージについての前記第1のシーケンス識別子及び前記第1のシーケンス番号、及び、前記第1のアウトバウンド・メッセージについての前記第2のシーケンス識別子及び第3のシーケンス番号、並びに前記プロデューサに関連付けられた識別子、及び前記第3のコンシューマに関連付けられた識別子を格納した第3のテーブルを作成する、
    請求項2〜4のいずれか一項に記載のシステム。
  6. 前記第1の媒介体が、前記第2のアウトバウンド・メッセージを第3のコンシューマに関連付けられたキュー又は前記第4のコンシューマに関連付けられたキューに転送するように動作可能であり、
    前記ロギング要素が、前記第2のアウトバウンド・メッセージの送信に応答して、前記第3のテーブルを上書きして、前記第1のシーケンス番号を前記第2のシーケンス番号で更新し且つ前記第3のシーケンス番号を前記第4のシーケンス番号に更新し、さらに、前記第2のアウトバンド・メッセージを処理するためのコンシューマが前記第4のコンシューマである場合には前記第3のコンシューマに関連付けられた識別子を前記第4のコンシューマに関連付けられた識別して更新する、
    請求項5に記載のシステム。
  7. 前記第1のコンシューマが第1の媒介体であり、
    前記第2のコンシューマが第2の媒介体であり、
    前記第1の媒介体が、前記第1のメッセージ(以下、第1のインバウンド・メッセージという)の受信に応答して第1のアウトバウンド・メッセージ及び第2のアウトバウンド・メッセージを生成し、前記第1のアウトバウンド・メッセージには、当該第1のアウトバウンド・メッセージについての、前記第1のシーケンス識別子に関連付けられた第2のシーケンス識別子及び第3のシーケンス番号が割り当てられており、及び、前記第2のアウトバウンド・メッセージには、当該第2のアウトバウンド・メッセージについての、前記第1のシーケンス識別子に関連付けられた前記第2のシーケンス識別子及び第4のシーケンス番号が割り当てられており、前記第4のシーケンス番号は、前記第2のシーケンス識別子が割り当てられたメッセージにおいて、前記第3のシーケンス番号を割り当てられたメッセージが処理された後に、前記第4のシーケンス番号を割り当てられたメッセージが処理されることを示し、
    前記ロギング要素が、前記第1のインバウンド・メッセージの送信に応答して、前記第1のシーケンス識別子、前記第1のシーケンス番号、及び前記第1の媒介体に関連付けられた識別子を格納した第2のテーブルを作成し、前記第2のインバウンド・メッセージの送信に応答して、前記第2のテーブルを上書きして、前記第1のシーケンス番号を前記第2のシーケンス番号で更新し且つ前記第2のメッセージを転送するための媒介体が第2の媒介体である場合には前記第1の媒介体に関連付けられた識別子を前記第2の媒介体に関連付けられた識別子で更新する、
    請求項1に記載のシステム。
  8. 前記第1の媒介体又は前記第2の媒介体が、前記第2のメッセージ(以下、第2のインバウンド・メッセージという)の受信に応答して第3のアウトバウンド・メッセージ及び第4のアウトバウンド・メッセージを生成し、前記第3のアウトバウンド・メッセージには、当該第3のアウトバウンド・メッセージについての、前記第1のシーケンス識別子に関連付けられた前記第2のシーケンス識別子及び第5のシーケンス番号が割り当てられており、及び、前記第4のアウトバウンド・メッセージには、当該第4のアウトバウンド・メッセージについての、前記第1のシーケンス識別子に関連付けられた前記第2のシーケンス識別子及び第6のシーケンス番号が割り当てられており、前記第6のシーケンス番号は、前記第2のシーケンス識別子が割り当てられたメッセージにおいて、前記第5のシーケンス番号を割り当てられたメッセージが処理された後に、前記第6のシーケンス番号を割り当てられたメッセージが処理されることを示す、
    請求項7に記載のシステム。
  9. 前記第1の媒介体が、前記第1のアウトバウンド・メッセージ及び前記第2のアウトバウンド・メッセージを第3のコンシューマに関連付けられたキューに転送するように動作可能であり、
    前記ロギング要素が、前記第2のアウトバウンド・メッセージの送信に応答して、前記第2のインバウンド・メッセージについての前記第1のシーケンス識別子及び前記第1のシーケンス番号、及び、前記第1のアウトバウンド・メッセージについての前記第2のシーケンス識別子及び第4のシーケンス番号、並びに前記プロデューサに関連付けられた識別子、及び前記第3のコンシューマに関連付けられた識別子を格納した第3のテーブルを作成する、
    請求項8に記載のシステム。
  10. 前記第1の媒介体が、前記第3のアウトバウンド・メッセージ及び前記第4のアウトバウンド・メッセージを第3のコンシューマに関連付けられたキュー又は前記第4のコンシューマに関連付けられたキューに転送するように動作可能であり、
    前記ロギング要素が、前記第4のアウトバウンド・メッセージの送信に応答して、前記第3のテーブルを上書きして、前記第1のシーケンス番号を前記第2のシーケンス番号で更新し且つ前記第4のシーケンス番号を前記第6のシーケンス番号に更新し、さらに、前記第3のアウトバンド・メッセージ及び前記第4のアウト・バウンド・メッセージを処理するためのコンシューマが前記第4のコンシューマである場合には前記第3のコンシューマに関連付けられた識別子を前記第4のコンシューマに関連付けられた識別して更新する、
    請求項9に記載のシステム。
  11. 前記第1のコンシューマ前記第1のメッセージの受信に応答してアウトバウンド・メッセージを生成し、当該生成されアウトバウンド・メッセージを第3のコンシューマに転送するように動作可能であり、
    前記アウトバウンド・メッセージは、当該アウトバウンド・メッセージについての、前記第1のシーケンス識別子に関連付けられた第2のシーケンス識別子及び第3のシーケンス番号が割り当てられており、
    及び、
    前記ロギング要素がさらに、前記第1のメッセージに割り当てられた前記第1のシーケンス識別子及び前記第1のシーケンス番号と前記アウトバウンド・メッセージに割り当てられた前記第2のシーケンス識別子及び前記第3のシーケンス番号とをロギングするように動作可能である、請求項に記載のシステム。
  12. 前記第1のコンシューマが、前記第3のコンシューマからの前記アウトバウンド・メッセージの処理の完了に関連付けられた別の確認応答を受信することに応答して、前記確認応答を生成するように動作可能である、請求項11に記載のシステム。
  13. 非同期式メッセージング・システムにおいて、メッセージに関連付けられた順序を保存する方法であって、前記システムは送信側アプリケーション(以下、「プロデューサ」という)及び複数の受信側アプリケーション(以下、「コンシューマ」)を実行し、前記複数のコンシューマそれぞれにキューが関連付けられており、前記プロデューサは複数のメッセージを生成し、そして当該複数のメッセージを前記複数のコンシューマのうちの1つのコンシューマに関連付けられたキューに送信することができ、
    前記方法は、
    受信機構において、第1のシーケンス識別子及び第1のシーケンス番号を割り当てられた第1のメッセージを受信するステップであって、前記第1のシーケンス識別子は、1つのプロデューサに対して一意であり、又は、1つのプロデューサ及び1つのコンシューマに対して一意であり、及び、前記シーケンス番号は、前記シーケンス識別子によって識別されたシーケンス内において一意である、前記受信するステップと、
    前記第1のメッセージを処理するための第1のコンシューマを選択するステップであって、前記第1のコンシューマが前記第1のメッセージを処理する、前記選択するステップと、
    前記第1のメッセージ又は前記第2のメッセージに割り当てられたシーケンス識別子及びシーケンス番号をストレージ要素内でロギングし且つ前記第1のコンシューマ又は第2のメッセージを処理するための前記第1のコンシューマ若しくは第2のコンシューマに関連付けられた識別子を前記ストレージ要素内でロギングし、ロギングされたデータを作成するステップであって、前記第1のメッセージの送信に応答して、前記第1のシーケンス識別子、前記第1のシーケンス番号、及び前記第1のコンシューマに関連付けられた識別子を格納した第1のテーブルを作成するステップと、
    受信機構において、第1のシーケンス識別子及び第2のシーケンス番号を割り当てられた第2のメッセージを送信することに応答して、前記第1のテーブルを上書きして、前記第1のシーケンス番号を前記第2のシーケンス番号で更新し且つ前記第2のメッセージの処理をするためのコンシューマが前記第2のコンシューマである場合には前記第1のコンシューマに関連付けられた識別子を前記第2のコンシューマに関連付けられた識別子で更新するステップであって、前記第2のシーケンス番号は、前記第1のシーケンス識別子が割り当てられたメッセージにおいて、前記第1のシーケンス番号を割り当てられたメッセージが処理された後に、前記第2のシーケンス番号を割り当てられたメッセージが処理されることを示す、前記更新するステップと、
    前記第1のメッセージの処理の完了に関連付けられた確認応答が前記受信機構によって受信されたか否かを判断するステップと、
    (1)前記確認応答の受信、及び、(2)前記確認応答の前記受信の前に前記第2のメッセージが前記受信機構によって受信れたことを前記ロギングされたデータを使用して判断した後に、前記第2のメッセージ処理するためのコンシューマを前記ロギングされたデータを使用して選択するように前記選択要素を制御して、前記第2のメッセージを処理するステップと
    を含む、前記方法。
  14. メッセージに関連付けられた順序を保存するコンピュータ・プログラムであって、非同期式メッセージング・システムに請求項13に記載の方法の各ステップを実行させる前記コンピュータ・プログラム。
JP2006301466A 2005-11-25 2006-11-07 メッセージに関連付けられた順序を保存するためのシステム、並びに、その方法及びコンピュータ・プログラム Expired - Fee Related JP5128111B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB0524021.3 2005-11-25
GBGB0524021.3A GB0524021D0 (en) 2005-11-25 2005-11-25 A system for preserving message order

Publications (2)

Publication Number Publication Date
JP2007149081A JP2007149081A (ja) 2007-06-14
JP5128111B2 true JP5128111B2 (ja) 2013-01-23

Family

ID=35601206

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006301466A Expired - Fee Related JP5128111B2 (ja) 2005-11-25 2006-11-07 メッセージに関連付けられた順序を保存するためのシステム、並びに、その方法及びコンピュータ・プログラム

Country Status (4)

Country Link
US (2) US8090759B2 (ja)
JP (1) JP5128111B2 (ja)
CN (1) CN100472458C (ja)
GB (1) GB0524021D0 (ja)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7818426B2 (en) * 2007-03-27 2010-10-19 Oracle America, Inc. Method and system for processing a message by a message provider
ATE495614T1 (de) * 2007-09-20 2011-01-15 Markport Ltd Nachrichtenübermittlung in mobilfunknetzen
US7774490B2 (en) 2007-09-20 2010-08-10 Microsoft Corporation Crisscross cancellation protocol
WO2009154752A1 (en) * 2008-06-17 2009-12-23 Attivio, Inc. Ordered message processing
US8200765B2 (en) * 2009-01-12 2012-06-12 International Business Machines Corporation Preserving message order using a message ordering manager
US20100250684A1 (en) * 2009-03-30 2010-09-30 International Business Machines Corporation High availability method and apparatus for shared resources
PL2254046T3 (pl) 2009-05-18 2014-12-31 Amadeus Sas Sposób i system zarządzania kolejnością wiadomości
US8375095B2 (en) * 2009-12-22 2013-02-12 Microsoft Corporation Out of order durable message processing
US8495656B2 (en) 2010-10-15 2013-07-23 Attivio, Inc. Ordered processing of groups of messages
CN103532822B (zh) * 2012-07-02 2016-12-21 北京神州泰岳软件股份有限公司 消息投递的管理方法、服务器和系统
US10185605B2 (en) * 2012-08-31 2019-01-22 Sap Se In-order message processing with message-dependency handling
CN103078811B (zh) * 2013-01-31 2015-12-09 北京金和软件股份有限公司 一种基于多线程环境网络数据包乱序控制方法
US9654408B2 (en) 2013-11-06 2017-05-16 Amazon Technologies, Inc. Strict queue ordering in a distributed system
US9894143B1 (en) 2013-11-06 2018-02-13 Amazon Technologies, Inc. Pre-processing and processing pipeline for queue client
US9223843B1 (en) * 2013-12-02 2015-12-29 Amazon Technologies, Inc. Optimized log storage for asynchronous log updates
US9378236B2 (en) * 2013-12-26 2016-06-28 Microsoft Technology Licensing, Llc In-place recipient preservation
US9665840B2 (en) 2014-03-21 2017-05-30 Oracle International Corporation High performance ERP system ensuring desired delivery sequencing of output messages
US9843528B2 (en) 2014-06-27 2017-12-12 Amazon Technologies, Inc. Client selection in a distributed strict queue
EP3167628B1 (en) * 2014-07-10 2020-04-01 Telefonaktiebolaget LM Ericsson (publ) Methods and devices for signalling in a communication network
US10244070B2 (en) 2016-01-26 2019-03-26 Oracle International Corporation In-memory message sequencing
US9935888B2 (en) * 2016-05-02 2018-04-03 Visa International Service Association System and method for latency-based queuing
US10284515B2 (en) 2017-06-08 2019-05-07 Amadeus S.A.S. Multi-standard message processing
WO2018224659A1 (en) 2017-06-08 2018-12-13 Amadeus S.A.S. Multi-standard message processing
US11150945B2 (en) * 2019-09-04 2021-10-19 Red Hat, Inc. Reverse restartable sequences for lock polling scalability
US11579801B2 (en) 2020-06-09 2023-02-14 Samsung Electronics Co., Ltd. Write ordering in SSDs
US12495319B2 (en) 2022-10-13 2025-12-09 T-Mobile Usa, Inc. Evaluating operation of a monitoring system associated with a wireless telecommunication network

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH025134A (ja) * 1988-06-24 1990-01-10 Nec Corp メッセージスケジュール方式
JPH05120178A (ja) * 1991-10-30 1993-05-18 Kyushu Nippon Denki Software Kk 電文保証方法
US6604205B1 (en) * 2000-02-07 2003-08-05 Hewlett-Packard Development Co., L.P. System and method for state synchronization
US20020042830A1 (en) * 2000-03-31 2002-04-11 Subhra Bose System, method and applications real-time messaging over HTTP-based protocols
US6850982B1 (en) * 2000-12-19 2005-02-01 Cisco Technology, Inc. Methods and apparatus for directing a flow of data between a client and multiple servers
US7177899B2 (en) 2000-12-28 2007-02-13 Future System Consulting Corp. Framework system
US7164654B2 (en) * 2001-03-09 2007-01-16 Denso Corporation ARQ parameter retransmission control for variable data rate channels
JP2005120178A (ja) 2003-10-15 2005-05-12 Yokohama Rubber Co Ltd:The シリカマスターバッチの製造方法
US20050198401A1 (en) * 2004-01-29 2005-09-08 Chron Edward G. Efficiently virtualizing multiple network attached stores
US7894372B2 (en) * 2005-05-31 2011-02-22 Iac Search & Media, Inc. Topology-centric resource management for large scale service clusters
US20070047539A1 (en) * 2005-09-01 2007-03-01 Tekelec Methods, systems, and computer program products for preserving sequencing of signaling messages at a routing node
US7892399B2 (en) * 2008-05-29 2011-02-22 Honeywell Asca Inc. Local tension generating air stabilization system for web products

Also Published As

Publication number Publication date
US20120047518A1 (en) 2012-02-23
CN1971521A (zh) 2007-05-30
CN100472458C (zh) 2009-03-25
JP2007149081A (ja) 2007-06-14
GB0524021D0 (en) 2006-01-04
US8090759B2 (en) 2012-01-03
US20070124398A1 (en) 2007-05-31
US8364743B2 (en) 2013-01-29

Similar Documents

Publication Publication Date Title
JP5128111B2 (ja) メッセージに関連付けられた順序を保存するためのシステム、並びに、その方法及びコンピュータ・プログラム
EP2248311B1 (en) Method and system for message delivery in messaging networks
CN110297801B (zh) 基于容错fpga的事务系统的正好一次事务语义的系统和方法
JP5714571B2 (ja) キャッシュクラスタを構成可能モードで用いるキャッシュデータ処理
US9881071B2 (en) Transport layer abstraction for clustering implementation
US6934247B2 (en) Recovery following process or system failure
CN103562890B (zh) 在发布/订阅消息系统中管理消息订阅的方法和系统
EP2335153B1 (en) Queue manager and method of managing queues in an asynchronous messaging system
US20070204275A1 (en) Method and system for reliable message delivery
US6968359B1 (en) Merge protocol for clustered computer system
JP4028847B2 (ja) 共通作業キュー環境における最適格サーバ
US9069632B2 (en) Message processing
US8275905B2 (en) System and method for store-and-forward for highly available message production
KR20060103829A (ko) 서브큐를 이용한 로컬 메시지 프로세싱 개선
JP2006048122A (ja) 通信システム
JP2018014049A (ja) 情報処理システム、情報処理装置、情報処理方法及びプログラム
US7818757B1 (en) Method for guaranteeing processing of messages in a continuous processing system
US7747894B2 (en) Transport-neutral in-order delivery in a distributed system
CN117579229A (zh) 一种分布式事务处理方法及系统
US20050165910A1 (en) System and method for managing communication between server nodes contained within a clustered environment
CN109729101B (zh) 多层次低耦合的通信系统
EP3710929B1 (en) Optimized reconciliation in a controller switch network
US20230096403A1 (en) Keyed Event Queue
US7924844B1 (en) System and method for communicating messages among components in a computing environment
KR102904974B1 (ko) 메모리 계층 구조를 포함하는 toe 기반 네트워크 인터페이스 장치 및 이의 동작 방법

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090828

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20111013

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111108

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120202

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20120202

RD12 Notification of acceptance of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7432

Effective date: 20120202

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20120202

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120606

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20120831

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120831

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20121010

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20121010

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20121010

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121031

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151109

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees