E インタフェース順序付け
この付録では、Oracle SOA Suite for healthcare integrationがインタフェース順序付けを使用してメッセージのエンドツーエンドの先入れ先出し(FIFO)処理を実行する方法について説明します。
この付録の内容は次のとおりです。
E.1 概要
Oracle SOA Suite for healthcare integrationのメッセージ処理は、特定の広いレベルのステップで実行されます。
-
Oracle Healthcareインバウンド・コンポーネントがエンドポイントからメッセージを受信し、同等のXMLメッセージをSOAコンポジットに配信します。
-
コンポジットは必要な変換があれば実行し、メッセージのターゲット・エンドポイントを判別して、同一または変換済のメッセージをOracle Healthcareエンジンにルーティングします。
-
次に、Oracle Healthcareアウトバウンド・コンポーネントがメッセージをターゲット・エンドポイントに配信します。
Oracle SOA Suite for healthcare integrationでは、次のアプローチを使用してメッセージのFIFO処理を実行できます。
コンポーネント順序付け
このアプローチでは、3つのコンポーネント(Oracle Healthcareインバウンド・コンポーネント、コンポジット、Oracle Healthcareアウトバウンド・コンポーネント)すべての境界線を越えてメッセージの順序を保持することによってFIFOを達成します。
インタフェース順序付け
このアプローチでは、複数のレイヤーにわたるメッセージを相互に関連付け、配信ポイントにおける順序付けをターゲット・エンドポイントに適用することによって、複数のエンドポイントにわたってFIFOを達成します。
たとえば、インバウンドOracle Healthcareエンドポイントで20件のメッセージが順に受信された場合、各メッセージがシステムに到着したときにタイムスタンプが付けられ、順序どおりに処理されるようにそれらのメッセージがエンジンに送信されます。エンジンによって順序内のメッセージが処理され、タイムスタンプに基づいて配信されるようにそれらのメッセージがアウトバウンド・エンドポイントに送信されます。つまり、インバウンド・エンドポイントに到着したメッセージは最初にアウトバウンド・エンドポイントから配信されます。
なんらかの理由で処理に時間がかかっていたりエラーが発生したために早いタイムスタンプが付いたメッセージが停滞している場合、遅いタイムスタンプが付いた他のメッセージが処理されますが、アウトバウンド・エンドポイントでは順序どおりにキューに配置されます。これらのメッセージは、早いタイムスタンプの付いた(停滞している)メッセージが正常に処理されてアウトバウンド・エンドポイントから配信されるまで、アウトバウンド・エンドポイントから配信されません。メッセージでエラーが発生した場合は、再発行を試みるか、キュー内で待機している処理済メッセージを配信できるように順序付けされたエンドポイント・ダッシュボードからメッセージを削除できます。
ノート:
インバウンド・メッセージの場合、エンドツーエンドのインタフェース順序付けを使用するエンドポイントの「一時停止」/「再開」ボタンは無効になります。
このアプローチによって、順序付けチェックポイントの数が減るうえ、順序管理が単一ポイントで行われ、システムのパフォーマンスとスケーラビリティが向上します。
ノート:
インバウンドの場合、アプリケーション・メッセージが正常に作成された後でなんらかの障害が発生すると、再発行のためにXMLペイロードが保持され、アプリケーション・メッセージの再発行オプションが有効になります。アプリケーション・メッセージが作成されていない場合は、ワイヤ・メッセージを再発行する必要があります。
アウトバウンドの場合、XMLからネイティブ形式への変換が正常に完了すると、XMLペイロードは保持されません。ただし、XMLからネイティブへの変換が失敗した場合は、再発行できるようにXMLペイロードが保持されます。
E.2 インタフェース順序付けのための構成に関する考慮事項
Oracle SOA Suite for healthcare integrationでインタフェース順序付けを有効にするには、エンドポイント・レベルおよびコンポジット・レベルでいくつかの構成を実行する必要があります。
E.2.1 エンドポイント・レベルでのインタフェース順序付けの構成
エンドポイント・レベルでメッセージのインタフェース順序付けを構成するには、トランスポート・プロトコル構成で「インタフェース順序付け」チェック・ボックスを選択します。
インタフェース順序付けを構成するには:
- Oracle SOA Suite for healthcare integrationコンソールで、インタフェース順序付けを構成するエンドポイントを開きます。
- 「トランスポートの詳細」ボタンをクリックして、「トランスポート・プロトコル・パラメータ」ダイアログ・ボックスを表示します。
- 「詳細」タブをクリックします。
- 「順序付けモード」を選択します。
- 「インタフェース順序付け」チェック・ボックスを選択します。
- 「OK」をクリックし、エンドポイント・ページで「適用」をクリックします。
図E-1に、インタフェース順序付けを構成するための「トランスポート・プロトコル・パラメータ」ダイアログ・ボックスを示します。
この構成は、エンドポイントで受信されたインバウンド・メッセージにのみ影響します。メッセージの配信先のエンドポイントは、インタフェース順序付けのために構成する必要はありません。
エンドポイント・レベルでインタフェース順序付けを構成すると、このエンドポイントで受信されるメッセージにはインタフェース順序付けのマークが付き、インタフェース順序付け固有のヘッダーが内部デリバリ・チャネルおよびコンポジットに配信されます。
ノート:
インタフェース順序付けでは、コンポジットでメッセージが処理される順序は保証されません。このアプローチで保証されるのは、メッセージがリモート・エンドポイントに順番に配信されるということのみです。
E.2.2 コンポジット・レベルでのインタフェース順序付けの構成
(インバウンド・メッセージとアウトバウンド・メッセージとの)相関を実現するには、インタフェース順序付けのメッセージを処理するコンポジットが、次の追加ヘッダーを処理および移入する必要があります。
-
トランスポート・レイヤーとエンジン・レイヤーの間の相関を確立するには、インバウンド・メッセージ・ヘッダーの
INTERFACE_SEQUENCE_ID
(ファブリックの場合はhc.interfaceSequenceId
)ヘッダーをアウトバウンド・メッセージ・ヘッダーにコピーする必要があります。 -
1つのインバウンド・メッセージが複数のエンドポイントに配信されるファンアウト(ブロードキャスト)の場合は、コンポジットがファンアウトに関連する各アウトバウンド・メッセージに
INTERFACE_GROUP_COUNT
ヘッダーを移入する必要があります。たとえば、1つのメッセージを2つのエンドポイントにエンキューする場合、エンキューされたメッセージのヘッダー
INTERFACE_GROUP_COUNT
(ファブリックの場合はhc.interfaceGroupCount
)の値はどちらも2
に設定されている必要があります。 -
ファンアウト・メッセージを同じアウトバウンド・エンドポイントに送信する場合、JMS専用プロパティの
INTERFACE_GROUP_POSITION
を使用して、同じターゲット・エンドポイントに送信される複数のインタフェース・アウトバウンド・メッセージの順序を保持する必要があります。メッセージは、指定された位置値に基づいて配信されます。ただし、アウトバウンド側でインメモリー統合を行う場合、メッセージがOracle Healthcareに到着する順序がメッセージ配信で使用されます。 -
コンポジットが特定のメッセージをフィルタ処理する必要がある場合、メッセージがスキップされたことを示す通知を順序付けフレームワークに送信する必要があります。
これを達成するには、
INTERFACE_SEQUENCE_DISCARD_ID
(ファブリックの場合はhc.interfaceSequenceDiscardId
)ヘッダー・セットを元のメッセージのINTERFACE_SEQUENCE_ID
ヘッダーの値に設定して、Oracle HealthcareアダプタまたはJMSキューにシグナルを送信します。
E.2.3 順序メッセージの状態の理解
Oracle Healthcareには、インタフェース順序付けされたメッセージの状態をダッシュボードで表示する機能があります。図E-2に、メッセージの順序状態を示します。
ダッシュボードには、次の順序状態が表示されます。
E.2.3.1 ルーティング
ダッシュボードでメッセージの順序状態がRouting
になっている場合、そのメッセージがすでにバックエンドに配信されたことを示しています。この場合、B2B_SEQUENCE_MANAGER
表のインバウンド・メッセージの行に、ROUTING
の値が表示されます。バックエンドに配信されたメッセージには新しいヘッダーが付きます。
-
hc.interfaceSequenceId
(ファブリックの場合) -
INTERFACE_SEQUENCE_ID
(JMSの場合)
E.2.3.2 Outbound_Processing
ダッシュボードでメッセージの順序状態がOutbound_Processing
になっている場合、そのメッセージがバックエンドから受信されて、アウトバウンド処理中であることを示しています。この場合、メッセージがバックエンドに配信された後、メッセージにINTERFACE_SEQUENCE_ID
ヘッダーが含まれるかどうかが評価され、インタフェース順序付けされたメッセージであるかどうかが判別されます。メッセージにヘッダーが含まれる場合、続いてファンアウトが可能かどうかを特定するためにINTERFACE_GROUP_COUNT
ヘッダーが読み取られ、メッセージ順序の状態にOutbound_Processing
というマークが付きます。
E.2.4 インタフェース順序付けされたメッセージの再発行または破棄
エラーが発生した場合、インタフェース順序付けされたメッセージを再発行または破棄できます。
-
インバウンド・メッセージ処理でエラーが発生した場合、そのメッセージが失敗したことがダッシュボードに示されます。この場合、ワイヤ・メッセージを再発行できます。
-
アウトバウンド処理でエラーが発生した場合は、ペイロードが保持されるため、アプリケーション・メッセージを再発行できます。
-
また、ターゲットへのすべてのメッセージが使用可能になった後は、(ダッシュボードに表示されている)アウトバウンド・メッセージを破棄することもできます。インバウンド・エンドポイント・ダッシュボードで、ソースからインバウンド・メッセージを破棄することもできます。これによって、同じ順序内でターゲットに送信されるアウトバウンド・メッセージはすべて破棄されます。生成されるエラー・メッセージには、破棄されたすべてのメッセージの情報が含まれています。