この章では、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)
表23-1に、Oracle Mediatorがメッセージを複数のグループにソートする方法を示します。各グループ内のメッセージの順序は、使用している再シーケンサのタイプによって異なります。
表23-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式を指定します。
グループ化の対象
順序付けの対象
Figure 23-1に示すメッセージ・ペイロードでは、CustomerId
がインスタンス順序付けのベースとなるフィールドで、CustomerName
がグループ化のベースとなるフィールドです。
注意: 再順序付けは、WSDLファイルでリクエスト操作タイプおよびリクエスト・コールバック操作タイプのOracle Mediatorに対してのみサポートされています。つまり、WSDL操作に同期リプライ要素がある場合、再順序付けはユーザー・インタフェースでは使用できません。これらの操作タイプの詳細は、第24章「Oracle Mediatorのメッセージ交換パターンの理解」を参照してください。 |
Oracle Mediatorでは、ユーザーが指定した順序で着信メッセージを再順序付けできます。この実装によって、3種類の再順序付けの順序を指定できます。
この項では、標準再シーケンサについて説明します。
標準再シーケンサは、標準再シーケンサ・パターンをサポートしており、メッセージ内の単純な識別子の連番から識別子を使用するアプリケーションに関連しています。標準再シーケンサは一連のメッセージを受信しますが、これらのメッセージは順序に従って着信しない可能性があります。この場合、sequenceID
に基づいた完全な順序を取得するまで、メッセージは順不同で格納されます。正しい順序のメッセージは、そのメッセージのsequenceID
に基づいて非同期で処理されます。
標準再シーケンサであるOracle Mediatorサービス・コンポーネントのアウトバウンド・サービスへのメッセージは、順番に着信することが保証されている点に注意してください。標準再シーケンサでは、メッセージの順序のみが変更され、内容は変更されません。
標準のOracle Mediator再シーケンサを使用する場合は、常にグループXPath式とsequenceID
XPath式を指定する必要があります。これらのXPath式は、Oracle Mediator再シーケンサがメッセージでグループおよび順序IDを検索する場所を指定する際に使用されます。また、開始sequenceID
とsequenceID
の増分デルタに関して順序番号を指定する必要があります。この番号付けは、各グループを形成する際に使用されます。
表23-2に、複数のグループが、増分デルタの2つの異なる値に対してどのように形成されるかを示します。
表23-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パターンをサポートしています。このパターンは、Oracle Mediatorへのメッセージの着信時刻に基づいてメッセージを順序付けする必要があるアプリケーションに関連しています。FIFO再シーケンサは、順序に従って一連のメッセージを受信し、Oracle Mediatorへの着信時刻に基づいて、すべてのグループのメッセージを順に処理します。
FIFO再シーケンサとして機能するOracle Mediatorのアウトバウンド・サービスへのメッセージは、着信時刻に基づいて順に着信することが保証されている点に注意してください。したがって、メッセージは、再シーケンサ・データ・ストアに格納された順に配信されます。
FIFO再シーケンサを使用する場合は、常にグループXPath式を指定する必要があります。ただし、メッセージはFIFO再シーケンサとして構成されているOracle Mediatorへの着信時刻に従って処理されるため、順序IDを指定する必要はありません。グループXPath式は、FIFO再シーケンサがメッセージのグループ化のために、メッセージ内のグループ情報を検索する場所を指定する際に使用されます。FIFOパターンに必要な構成は他にはありません。
表23-3に、FIFO再シーケンサの動作を示します。msgX(Y,Z)は、メッセージがOracle Mediatorサービス・コンポーネントへのメッセージ番号Xとして着信し、そのメッセージにsequenceID
YとグループZが格納されていることを意味します。
表23-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) |
表23-3に示すように、メッセージは着信時刻に基づいて順序付けされ、sequenceID
は順序付けに使用されません。
注意: FIFO再シーケンサを使用する場合は、シングル・スレッドのインバウンド・アダプタを使用して不測の結果を回避してください。たとえば、再シーケンサとして構成されているOracle Mediatorサービス・コンポーネントの前で、ファイル/FTPアダプタ、データベース・アダプタまたはAQアダプタを使用する場合、処理ではこれらのアダプタをシングル・スレッドとして構成してください。シングル・スレッドとして構成しないと、メッセージの着信時刻がOracle Mediatorサービス・コンポーネントへのメッセージ着信時には計算されますが、アダプタ・サービスへの着信時には計算されないため、不測の結果が発生します。 |
この項では、ベスト・エフォート再シーケンサについて説明します。
この再シーケンサは、ベスト・エフォート・パターンをサポートしています。このパターンは、短時間に多数のメッセージを生成するため、順序付けに使用する識別子を再シーケンサに伝達できないアプリケーションに関連しています。通常、このようなシナリオの順序付けに使用される識別子は、dateTime
タイプまたは数値タイプの識別子です。dateTime
フィールドを順序ID XPathとして使用すると、順序付けを制御できます。メッセージはアプリケーションによって順に従って送信されることが期待されています。Oracle Mediatorでは、メッセージが順に従って配信されるように最善の努力をします。
ベスト・エフォート再シーケンサは、順に従った一連のメッセージまたはわずかに順から逸脱した一連のメッセージを受信できます。この再シーケンサでは、順序IDの増分に関する認識に基づくことなくメッセージの順序を並べ替えることもできます。これは、標準再シーケンサとは異なり、ベスト・エフォート再シーケンサには、順序IDの増分を事前に定義する必要がないことを意味します。メッセージの処理時には、本来の順序を取得できるかできないかに関係なく、メッセージは指定した順序IDとその時点で着信したメッセージに基づいて順に処理されます。順序IDは、数値またはdateTime
のいずれかです。したがって、順序付けは、順序IDの数値またはdateTime
の順に発生します。
ベスト・エフォート再シーケンサは、メッセージを非同期で処理します。新しいメッセージが再シーケンサ・データベースで使用可能な場合は常に、ベスト・エフォート再シーケンサが、指定された順序IDに従って新しいメッセージを順序付けし、その順序付けからmaxRowsRetrieved
パラメータの値と等しいメッセージをロックして取得し、再シーケンサ独自のトランザクションでメッセージを1つずつ順に処理します。
ベスト・エフォート再シーケンサとして機能するOracle Mediatorサービス・コンポーネントのアウトバウンド・サービスへのメッセージは、sequenceID
に基づいて順に着信することが保証されていない点に注意してください。任意の時点で、使用可能なメッセージのスナップショットが保存され、それらのメッセージのみを対象として順序付けが実行されます。したがって、標準再シーケンサとは異なり、先に着信した大きい順序ID値のメッセージより前に、小さい順序ID値のメッセージが送信される保証はありません。後に到着した小さい順序ID値のメッセージは、使用可能なメッセージのスナップショットの保存とメッセージの順序付けが再度行われる次のサイクルで取得され、処理されます。
ベスト・エフォート再シーケンサを使用する場合は、グループXPath式と順序ID XPath式を指定する必要があります。これらのXPath式は、再シーケンサがメッセージでグループおよび順序IDを検索する場所を指定する際に使用されます。標準再シーケンサとは異なり、ベスト・エフォート再シーケンサには、順序の作成方法に関する認識はありません。ベスト・エフォート再シーケンサでの処理に使用される情報は他にはありません。
表23-4に、ベスト・エフォート再シーケンサの動作を示します。msgX(Y,Z)は、メッセージがOracle Mediatorサービス・コンポーネントへのメッセージ番号Xとして着信し、そのメッセージにsequenceID
YとグループZが格納されていることを意味します。
表23-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 に設定してください。これによって、次の順番のメッセージには、着信する実際のメッセージを配信するための余裕ができるため、次の処理ループでワーカー・スレッドによってフェッチされ、順に配信されます。 |
再シーケンサは、Oracle JDeveloperを使用して構成できます。この項では、Oracle JDeveloperでの再シーケンサの構成方法について説明します。
最初に、再順序付けの定義が必要なレベルを決定する必要があります。1つの操作のみが指定されているOracle Mediatorサービス・コンポーネントの場合は、操作またはサービス・コンポーネントのレベルで再順序付けを構成すると、結果は同じ動作になります。複数の操作が指定されているOracle Mediatorの場合、サービス・コンポーネント・レベルでの再順序付けの指定は、再順序付けがすべての操作に適用されることを意味します。したがって、あらゆる操作で着信するメッセージが再順序付けされます。デフォルトの再順序レベルは「操作」です。
再順序レベルを設定する手順は、次のとおりです。
図23-2に示すように、メディエータ・エディタの「再順序レベル」ドロップダウン・リストから再順序レベルを選択します。
「再順序レベル」に「コンポーネント」を選択すると、各操作で再順序付けオプションは表示されなくなり、サービス・コンポーネントに再順序モードを設定するための「再順序モード」フィールドが表示されます。デフォルトの再順序モードは「オフ」に設定されています。
再順序モードを選択すると、図23-3に示すように、サービス・コンポーネントの「再順序オプション」セクションが表示されます。操作の「再順序モード」フィールドが「オフ」に設定されている場合、「再順序オプション」セクションは表示されません。
「再順序オプション」セクションのオプションは、再順序モードの変更に応じて変化します。
この項では、再順序付け方法の構成方法について説明します。
表23-5に、標準再シーケンサの構成に必要なフィールドを示します。
表23-5 標準の再順序付け
フィールド名 | 説明 | デフォルト値 | 必須 |
---|---|---|---|
|
グループ化を実行する着信メッセージのフィールドを指し示すXPath。 |
該当なし |
いいえ |
|
再順序付けを実行する着信メッセージのフィールドを指し示すXPath。 |
該当なし |
はい |
|
予期されているメッセージを待機する期間(秒単位)。タイムアウトが発生すると、再シーケンサはグループをタイムアウトとしてロックします。 |
0脚注1 |
いいえ |
|
連番の開始番号。 |
1 |
いいえ |
|
連番の増分。 |
1 |
いいえ |
脚注1このデフォルト値は、グループのタイムアウトがデフォルトでは発生しないことを意味します。
図23-4に、「再順序」フィールドが「標準」に設定されている状態のOracle Mediatorを示します。
表23-6に、FIFO再シーケンサの構成に必要なフィールドを示します。
図23-5に、「再順序」フィールドが「FIFO」に設定されている状態のOracle Mediatorを示します。
図23-5 「再順序モード」が「FIFO」に設定されている状態のOracle Mediator
表23-7に、ベスト・エフォート再シーケンサの構成に必要なフィールドを示します。
表23-7 ベスト・エフォート再順序付け
フィールド名 | 説明 | デフォルト値 | 必須 |
---|---|---|---|
|
グループ化を実行する着信メッセージのフィールドを指し示すXPath。 |
該当なし |
いいえ |
|
再順序付けを実行する着信メッセージのフィールドを指し示すXPath。 |
該当なし |
はい |
|
順序IDのデータ型。 順序付けはデータ型に基づいて実行されます。サポートされている値は、日付/時間または数値です。 |
数値 |
いいえ |
|
再シーケンサがデータ・ストアから一度に取得する順に従ったメッセージの数。 |
5 |
いいえ |
図23-6に、「再順序」フィールドが「ベスト・エフォート」に設定されている状態のOracle Mediatorを示します。
図23-6 「再順序モード」が「ベスト・エフォート」に設定されている状態のOracle Mediator