この章では、Oracle Mediatorにおけるメッセージの再順序付けのサポートについて説明します。項目は次のとおりです。
Oracle Mediatorの再シーケンサは、関連はしているが順不同な一連のメッセージを適切な順序に再編成します。受信メッセージが着信したときは、ランダムな順序である場合があります。再シーケンサは順次または時系列の情報に基づいてメッセージを順序付けした後、正しい順序でターゲット・サービスにメッセージを送信します。順序付けは、選択した順序付け方法に基づいて実行されます。
再シーケンサでは、グループと順序IDの2つの中心的な概念が使用されます。順序IDはメッセージの識別子の部分で、メッセージはこの識別子に基づいて再編成されます。再順序付けのために着信したメッセージは、複数のグループに分割され、各グループ内のメッセージは順序IDに従って順序付けされます。グループ内の順序付けは、他のグループのメッセージの順序とは独立して実行されます。グループ自体は相互に依存していないため、独立して処理できます。
たとえば、特定のグループに添付されているメッセージは、次の順序でOracle Mediatorサービス・コンポーネントに着信します。
msg9(a)、msg8(b)、msg7(a)、msg6(c)、msg5(a)、msg4(b)、msg3(c)、msg2(b)、msg1(a)
表22-1に、Oracle Mediatorがメッセージを複数のグループにソートする方法を示します。各グループ内のメッセージの順序は、使用している再シーケンサのタイプによって異なります。
表22-1 複数のグループにソートされるメッセージ
グループc | グループb | グループa |
---|---|---|
msg6(c)、msg3(c) |
msg8(b)、msg4(b)、msg2(b) |
msg9(a)、msg7(a)、msg5(a)、msg1(a) |
すべてのグループは相互に独立して処理され、あるグループで発生したエラーが、他のグループの処理に影響を与えることはありません。
グループIDと順序IDは、ペイロードのXPath式を介して識別されます。グループ化および順序付けが完了したメッセージ・ペイロードの要素を指し示すXPath式を指定します。
図22-1に示すメッセージ・ペイロードでは、CustomerId
がインスタンス順序付けのベースとなるフィールドで、CustomerName
がグループ化のベースとなるフィールドです。
注意: 再順序付けは、WSDLファイルでリクエスト操作およびリクエスト・コールバック操作のOracle Mediatorコンポーネントに対してのみサポートされています。つまり、WSDL操作に同期リプライ要素がある場合、再順序付けはユーザー・インタフェースでは使用できません。これらの操作の詳細は、第23章「Oracle Mediatorのメッセージ交換パターンの理解」を参照してください。 |
Oracle Mediatorでは、ユーザーが指定した順序で着信メッセージを再順序付けできます。この実装によって、3種類の再順序付けの順序を指定できます。
標準再シーケンサは、標準再シーケンサ・パターンをサポートしています。次の各項では、標準再シーケンサおよびメッセージの処理方法について説明します。
標準再シーケンサは、メッセージ内の単純な識別子の連番から識別子を使用するアプリケーションに役立ちます。標準再シーケンサは一連のメッセージを受信しますが、これらのメッセージは順序に従って着信しない可能性があります。この場合、順序IDに基づいた完全な順序を受信するまで、メッセージは順不同で格納されます。正しい順序のメッセージは、そのメッセージの順序IDに基づいて非同期で処理されます。
標準再シーケンサであるOracle Mediatorサービス・コンポーネントのアウトバウンド・サービスへのメッセージは、順番に着信することが保証されている点に注意してください。標準再シーケンサでは、メッセージの順序のみが変更され、内容は変更されません。
標準のOracle Mediator再シーケンサを使用する場合は、常にグループXPath式と順序ID XPath式を指定する必要があります。これらは、Oracle Mediator再シーケンサがメッセージでグループおよび順序IDを検索できる場所を指定します。また、開始順序IDと順序IDの増分デルタに関して順序番号を指定する必要があります。この番号付けは、各グループを形成する際に使用されます。グループ、順序IDおよび増分プロパティに加えて、予期されているメッセージを待機する期間(秒単位)を指定することもできます。
表22-2に、複数のグループが、増分デルタの2つの異なる値に対してどのように形成されるかを示します。
表22-2 2つの異なる値に対する複数グループの形成
開始順序ID | 増分デルタ | グループ1 | グループ2 | ... | グループn |
---|---|---|---|---|---|
1 |
1 |
1,2,3,4,5,... |
1,2,3,4,5,... |
... |
1、2、3、4、5、...n |
1 |
5 |
1,5,10,15,... |
1,5,10,15,... |
... |
1,5,10,15,... |
注意:
|
脚注1タイムアウト期間とは、予期されているメッセージを待機する期間(秒単位)です。
FIFO再シーケンサは、標準の先入れ先出し(FIFO)パターンをサポートしています。次の各項では、FIFO再シーケンサおよびメッセージの処理方法について説明します。
FIFO再シーケンサは、Oracle Mediatorへのメッセージの着信時刻に基づいて順序付けする必要があるアプリケーションに役立ちます。FIFO再シーケンサは、順序に従って一連のメッセージを受信し、メッセージの着信時刻に基づいて、各グループのメッセージを順に処理します。
FIFO再シーケンサとして機能するOracle Mediatorのアウトバウンド・サービスへのメッセージは、着信時刻に基づいて順に着信することが保証されている点に注意してください。したがって、メッセージは、再シーケンサ・データ・ストアに格納された順に配信されます。
FIFO再シーケンサを使用する場合は、常にグループXPath式を指定する必要があります。ただし、メッセージはFIFO再シーケンサとして構成されているOracle Mediatorサービス・コンポーネントへの着信時刻に従って処理されるため、順序IDを指定する必要はありません。グループXPath式では、FIFO再シーケンサがメッセージのグループ化のために、メッセージ内のグループ情報を検索する場所を指定します。FIFOパターンに必要な構成は他にはありません。
表22-3に、FIFO再シーケンサの動作を示します。msgX(Y,Z)
は、メッセージがOracle Mediatorサービス・コンポーネントへのメッセージ番号Xとして着信し、そのメッセージにsequenceID
YとグループZが格納されていることを意味します。
表22-3 FIFO 再シーケンサの動作
着信メッセージ | 順序付けされたメッセージ |
---|---|
msg03(2,c) msg06(1,c) msg07(5,a) msg10(3,a) msg10(3,c) msg02(7,a) msg05(9,a) msg12(4,c) |
msg12(4,c)、msg10(3,c)、msg06(1,c)、msg03(2,c) msg05(9,a)、msg02(7,a)、msg10(3,a)、msg07(5,a) |
表22-3に示すように、メッセージは着信時刻に基づいて順序付けされ、sequenceID
は順序付けに使用されません。
注意: FIFO再シーケンサを使用する場合は、シングル・スレッドのインバウンド・アダプタを使用して不測の結果を回避してください。たとえば、再シーケンサとして構成されているOracle Mediatorサービス・コンポーネントの前で、ファイル/FTPアダプタ、データベース・アダプタまたはAQアダプタを使用する場合、シングル・スレッド処理のアダプタを構成してください。シングル・スレッド用に構成しないと、各メッセージの着信時刻がアダプタ・サービスへのメッセージ着信時ではなく、Oracle Mediatorサービス・コンポーネントへの着信時に計算されるため、不測の結果が発生します。 |
Oracle Mediator再シーケンサは、ベスト・エフォート・パターンをサポートしています。次の各項では、ベスト・エフォート再シーケンサおよびメッセージの処理方法について説明します。
短期間に多数のメッセージを生成し、順序付けに使用する識別子の情報を再シーケンサに提供できないアプリケーションには、ベスト・エフォート・パターンが役立ちます。通常、このようなシナリオで順序付けに使用される識別子は、dateTime
タイプまたはnumeric
タイプです。dateTime
フィールドを順序ID XPathとして使用すると、順序付けを制御できます。メッセージはアプリケーションから順に送信されることが想定されるため、メッセージの送信日時を使用して順序付けができます。Oracle Mediatorは、メッセージが順序に従って配信されるように最善の方法を取ります。
ベスト・エフォート再シーケンサでは、順序IDの増分に関する認識に基づくことなくメッセージを並べ替えることができます。これは、標準再シーケンサとは異なり、ベスト・エフォート再シーケンサには、順序IDの増分を事前に定義する必要がないことを意味します。本来の順序を受信しても、メッセージの処理時には、メッセージは指定した順序IDと着信したメッセージに基づいて順に処理されます。順序IDは、numeric
またはdateTime
のいずれかです。したがって、順序付けは、順序IDの数値またはdateTime
の順に発生します。
ベスト・エフォート再シーケンサは、2つのメッセージ選択方法である最大行数選択または時間ウィンドウのいずれかに基づいて、メッセージを非同期で処理します。同時に選択および処理されたメッセージは、指定する最大行数またはメッセージが着信する時間ウィンドウのいずれかに基づいて処理されます。
最大行数選択
ベスト・エフォート再シーケンサが最大行数を使用するように構成されていると、再シーケンサ・データベースで新しいメッセージが使用可能な場合は常に、次の手順が実行されます。
再シーケンサは、指定した順序ID (通常は、日付およびタイム・スタンプ)に従ってメッセージを順序付けします。
再シーケンサは、前述の順序付けメッセージからmaxRowsRetrieved
パラメータの値と等しいメッセージ数をロックして選択します。
再シーケンサは、選択したメッセージを自身のトランザクションで1つずつ順に処理します。
時間ウィンドウ
ベスト・エフォート再シーケンサが最大行数ではなく時間ウィンドウを使用するように構成されていると、一度に選択および処理するメッセージは、指定する一定の期間に加えてオプションのバッファ時間に基づいて処理されます。各メッセージは特定の時間ウィンドウに属し、ある時間ウィンドウにあるメッセージは異なる時間ウィンドウに属しているメッセージとは別に処理されます。
時間ウィンドウに加えてバッファ時間を指定できます。バッファ時間は、連続する2つの時間ウィンドウの重複部分で、最初の時間ウィンドウに関連するメッセージを少し後で着信させることができます。デフォルトでは、バッファ時間は指定した時間ウィンドウの10%です。
ベスト・エフォート再シーケンサが時間ウィンドウを使用するように構成されていると、グループは反復方法で処理され、メッセージは次の手順で処理されます。
最初のメッセージが着信すると、タイム・ウィンドウが開始されます。
バッファが時間ウィンドウに追加され、バッファ時間の後に処理が開始されます。
再シーケンサは時間ウィンドウ内に着信したメッセージを取得し、すべてのメッセージから最大順序ID (通常は、日付およびタイム・スタンプ)を識別します。
再シーケンサは、バッファ時間内に着信し、上で識別した最大順序IDより小さい順序IDを持つすべてのメッセージを取得します。
再シーケンサは、前述の手順で取得したすべてのメッセージを順序IDの昇順でソートし、メッセージを処理します。
ベスト・エフォート再順序付け用に構成されたOracle Mediatorサービス・コンポーネントのアウトバウンド・サービスへのメッセージは、順序IDの順に着信することが保証されていない点に注意してください。任意の時点で、使用可能なメッセージのスナップショットが取得され、それらのメッセージのみを対象として順序付けが実行されます。したがって、標準再シーケンサとは異なり、先に着信した大きい順序ID値のメッセージより前に、小さい順序ID値のメッセージが送信される保証はありません。後に到着した小さい順序ID値のメッセージは、使用可能なメッセージのスナップショットの再取得とメッセージの再順序付けが行われる次のサイクルで処理される場合があります。
ベスト・エフォート再シーケンサを使用する場合は、グループXPath式、順序ID XPath式および順序ID (numeric
またはdateTime
)の日付タイプを指定する必要があります。これらは、再シーケンサがメッセージでグループと順序IDを検索する場所、および順序IDの処理方法を指定します。また、各順序付けバッチを選択するための最大行数、または1つのバッチに含まれるメッセージが着信する時間ウィンドウを指定する必要もあります。
標準再シーケンサとは異なり、ベスト・エフォート再シーケンサには、順序の作成方法に関する認識はありません。ベスト・エフォート再シーケンサでの処理に使用される情報は他にはありません。
表22-4に、ベスト・エフォート再シーケンサが処理するメッセージを判別するために最大行数を使用するよう構成されている場合の動作を示します。この例では、msgX(Y,Z)
は、メッセージがOracle Mediatorサービス・コンポーネントへのメッセージ番号Xとして着信し、そのメッセージにsequenceID
Yとgroup
Zが格納されていることを示しています。
表22-4 最大行数に基づいたベスト・エフォート再シーケンサの動作
グループC | 順序付けされたメッセージ |
---|---|
msg03(1,c) msg06(2,c) msg10(3,c) msg12(4,c) |
msg12(4,c)、msg10(3,c)、msg06(2,c)、msg03(1,c) |
注意: ベスト・エフォート再シーケンサが正しく機能するには、メッセージが順番に、またはほぼ順番に着信する必要があります。順番に着信しない場合は、正しく再順序付けされません。メッセージが短い間隔で着信しない場合は、maxRowsRetrieved の値を1 に設定すると、次のメッセージは着信までの時間の余裕ができ、次の処理ループで取得されます(したがって、順に配信されます)。 |
表22-5に、ベスト・エフォート再シーケンサがメッセージの着信期間に基づいて処理するよう構成されている場合の動作を示します。この例では、時間ウィンドウは10分、バッファは10% (1分)で、msgX(Y)
は、メッセージがOracle Mediatorサービス・コンポーネントへのメッセージ番号Xとして着信し、そのメッセージに順序ID Yが格納されていることを示しています。最初のメッセージが2:00:00に着信すると、時間ウィンドウが開始されます。時間ウィンドウはバッファ時間を追加することで2:10:00まで継続され、2:11:00までに着信したメッセージが処理されます。
表22-5 時間ウィンドウに基づいたベスト・エフォート再シーケンサの動作
グループCメッセージ/時間 | 順序付けされたメッセージ |
---|---|
msg01(04)/2:00:00 msg02(05)/2:00:20 msg03(01)/2:00:30 msg04(03)/2:00:50 msg05(07)/2:04:20 msg06(02)/2:04:45 msg07(13)/2:05:10 msg08(08)/2:05:40 msg09(06)/2:08:40 msg10(12)/2:09:20 msg11(10)/2:10:30 msg12(09)/2:10:40 msg13(14)/2:10:50 msg14(11)/2:13:00 |
msg03(01)、msg06(02)、msg04(03)、msg01(04)、msg02(05)、msg09(06)、msg05(07)、msg08(08)、msg12(09)、msg11(10)、msg10(12)、msg07(13) |
注意: 前述の例で、再シーケンサは時間ウィンドウの最大順序IDを13(メッセージ7から)と識別しました。メッセージ13はバッファ時間内に着信しましたが、14の順序IDを持っています。メッセージは元のグループで処理されるかわりに、2:10:50の着信時間で新しい時間ウィンドウが開始されます。メッセージ14の着信は遅すぎたため、2番目の時間ウィンドウに含められます。 |
再シーケンサは、Oracle JDeveloperを使用して構成できます。この項では、Oracle JDeveloperでの再シーケンサの構成方法について説明します。
サービス・コンポーネント・レベルまたは操作レベルのいずれかで再順序付けを定義できます。1つの操作のみを使用するOracle Mediatorサービス・コンポーネントの場合、操作またはサービス・コンポーネント・レベルで再順序付けを構成しても、動作は同じになります。複数の操作を持つOracle Mediatorサービス・コンポーネントの場合は、サービス・コンポーネント・レベルで再順序付けを指定すると、すべての操作に同じ再順序付けルールが適用され、すべての操作に着信するメッセージが再順序付けされます。デフォルトの再順序レベルは操作です。
再順序レベルを指定する手順は、次のとおりです。
図22-2に示すように、メディエータ・エディタで「再順序レベル」ドロップダウン・リストから再順序レベルを選択します。
コンポーネントを選択した場合、各操作で「再順序」フィールドは表示されなくなり、「再順序モード」フィールドが「再順序レベル」フィールド下に表示されるため、サービス・コンポーネントに再順序付けモードを設定できます。デフォルトの再順序モードは「オフ」に設定されています。
再順序モードを選択すると、図22-3に示すように、サービス・コンポーネントまたは操作で「再順序オプション」ボックスが表示されます。操作の「再順序モード」フィールドが「オフ」に設定されている場合、「再順序オプション」ボックスは表示されません。
「再順序オプション」セクションのオプションは、選択する再順序付けモードによって変更されます。
この項では、3つの異なるタイプの再順序付け方法を構成する手順を示します。
標準再シーケンサを構成する手順は、次のとおりです。
22.3.1項「再順序付けレベルの指定方法」の説明に従って、再順序レベルを設定してください。
構成する各Oracle Mediatorコンポーネントまたは操作のメディエータ・エディタで、「再順序モード」ドロップダウン・リストから「標準」を選択します。
図22-4に示すように、「再順序オプション」ボックスが表示され、標準再シーケンサのオプションが含まれています。
表22-6にリストされたフィールドに入力します。
注意: グループまたはIDフィールドにXPath式を直接入力するか、または各フィールドの右側にある「式ビルダーの起動」をクリックできます。これにより式ビルダーが起動し、フィールド式を作成したり関数を追加する際にグラフィカルなサポートが提供されます。 |
表22-6 標準の再順序付けオプション
フィールド名 | 説明 | デフォルト値 | 必須 |
---|---|---|---|
グループ |
グループ化が行われる着信メッセージのフィールドを指し示すXPath。MPLANファイルを直接編集する場合、関連する要素は |
該当なし |
n |
ID |
再順序付けが行われる着信メッセージのフィールドを指し示すXPath。MPLANファイルを直接編集する場合、対応する要素は |
該当なし |
y |
タイムアウト |
予期されているメッセージを待機する期間(秒単位)。タイムアウトが発生すると、再シーケンサはグループをタイムアウトとしてロックします。MPLANファイルを直接編集する場合、対応する要素は |
0脚注1 |
n |
開始 |
ID順序の開始番号。MPLANファイルを直接編集する場合、対応する要素は |
1 |
n |
増分 |
ID順序の増分。MPLANファイルを直接編集する場合、対応する要素は |
1 |
n |
脚注1このデフォルト値は、グループのタイムアウトがデフォルトでは発生しないことを意味します。
FIFO再シーケンサを構成する手順は、次のとおりです。
22.3.1項「再順序付けレベルの指定方法」の説明に従って、再順序レベルを設定してください。
構成する各Oracle Mediatorコンポーネントまたは操作のメディエータ・エディタで、「再順序モード」ドロップダウン・リストから「FIFO」を選択します。
表22-6に示すように、「再順序オプション」ボックスが表示され、標準再シーケンサのオプションが含まれています。
図22-5 「再順序モード」が「FIFO」に設定されている状態のOracle Mediator
「グループ」フィールドで、グループ化が実行される着信メッセージのフィールドを指し示すXPath式を入力します。
注意: MPLAN ファイルを直接変更する場合、XML要素の名前はgroupIDExpression になります。デフォルト値はなく、フィールドは必須ではありません。 |
ベスト・エフォート再シーケンサを構成する手順は、次のとおりです。
22.3.1項「再順序付けレベルの指定方法」の説明に従って、再順序レベルを設定してください。
構成する各Oracle Mediatorコンポーネントまたは操作のメディエータ・エディタで、「再順序モード」ドロップダウン・リストから「ベスト・エフォート」を選択します。
図22-6に示すように、「再順序オプション」ボックスが表示され、標準再シーケンサのオプションが含まれています。
図22-6 「再順序モード」が「ベスト・エフォート」に設定されている状態のOracle Mediator
表22-7にリストされているフィールドを入力して、ベスト・エフォート再シーケンサを構成します。
ヒント: メッセージの一度に処理する最大行数または時間ウィンドウのいずれかを指定できます。両方を指定することはできません。 |
必要に応じて、バッファとして追加された時間ウィンドウの割合を変更できます。Oracle Enterprise Manager Fusion Middleware Controlを使用してバッファを構成します。
手順については、『Oracle Fusion Middleware Oracle SOA SuiteおよびOracle Business Process Management Suite管理者ガイド』の再順序付けされたメッセージの構成に関する項を参照してください。
表22-7 ベスト・エフォート再順序付けオプション
フィールド名 | 説明 | デフォルト値 | 必須 |
---|---|---|---|
グループ |
グループ化が実行される着信メッセージのフィールドを指し示すXPath。MPLANファイルを直接編集する場合、関連する要素は |
該当なし |
n |
ID |
再順序付けが実行され、IDを含む着信メッセージのフィールドを指し示すXPath。MPLANファイルを直接編集する場合、対応する要素は |
該当なし |
y |
データ型 |
順序IDのデータ型。注文プロセスはデータ型に基づいています。サポートされる値は、日時または数値です。MPLANファイルを直接編集する場合、対応する要素は |
数値 |
y |
時間ウィンドウ |
メッセージの着信後、再順序付けのためデータ・ストアからメッセージを選択するのに待機する時間の長さ(分単位)。時間ウィンドウまたは最大行数を指定する必要がありますが(後述)、両方は指定できません。MPLANファイルを直接編集する場合、対応する要素は |
0 |
n |
最大行数 |
再シーケンサが一度にデータ・ストアから取得する、順に従ったメッセージの数。MPLANファイルを直接編集する場合、対応する要素は |
5 |
n |