複数の受信場所で Oracle Database の変更通知を受信する
同じデータベース内の同じテーブル (ACCOUNTACTIVITY など) のクエリ通知を受信するように構成された、異なる BizTalk アプリケーションの一部として複数の受信場所が作成されているシナリオを考えてみましょう。 同じテーブルに 100 個のレコードが挿入されると、すべての受信場所に通知メッセージが表示されます。 複数の受信場所で効果的に通知を受信するには、BizTalk アプリケーションから操作を呼び出して、1 つの受信場所で通知を受信した場合、もう一方の受信場所が同じ通知を受け取らないようにすることができます。 そのため、複数の場所で受信した通知を効果的に負荷分散できます。
受信通知を負荷分散するためにオーケストレーションを設定するために必要なタスクは、BizTalk Serverを使用して Oracle データベース変更通知を増分的に受信する場合と同じです。 このトピックでは、2 つのアプローチの違いのみを示します。
複数の受信場所にまたがるクエリ通知を Load-Balancing する
「BizTalk Serverを使用して Oracle データベース変更通知を増分的に受信する」トピックと同様に、PROCESS_RECORDSプロシージャを実行して増分通知を構成しました。 負荷分散を構成するには、通知されたレコードを削除するストアド プロシージャを実行します。 たとえば、次の定義を持つストアド プロシージャNOTIFY_LOAD_BALANCEを考えてみましょう。
PROCEDURE NOTIFY_LOAD_BALANCE (TABLE_DATA OUT SYS_REFCURSOR) IS
var int;
BEGIN
SELECT TID INTO var FROM ACCOUNTACTIVITY WHERE ROWNUM = 1 FOR UPDATE;
OPEN TABLE_DATA FOR SELECT * FROM ACCOUNTACTIVITY WHERE TID = var;
DELETE FROM ACCOUNTACTIVITY WHERE TID = var;
END NOTIFY_LOAD_BALANCE;
BizTalk アプリケーションの一部としてこのストアド プロシージャを実行すると、通知が既に受信されているレコードが削除されます。 そのため、もう 1 つの受信場所は次のレコードの通知を受け取ります。
通知を受信するための負荷分散を構成するために実行する必要がある大まかな手順を次に示します。
通知 (受信操作) とNOTIFY_LOAD_BALANCEプロシージャ (送信操作) のスキーマを作成します。
オーケストレーションを追加し、通知を受信し、プロシージャを実行し、プロシージャの応答を取得するための 3 つのメッセージを追加します。
送受信図形、メッセージ図形の構築、ポートを追加してオーケストレーションを作成します。 同じサンプル コードを使用して、NOTIFY_LOAD_BALANCE ストアド プロシージャを呼び出すメッセージを作成できます。 BizTalk Server管理コンソールで操作を実行するときは、C:\TestLocation\MessageIn の場所にNOTIFY_LOAD_BALANCEプロシージャの要求メッセージが必要であることに注意してください。 これは、「BizTalk Server を使用した Oracle データベース変更通知の増分の受信」で作成されたオーケストレーションの一部として呼び出すコード スニペットによって、C:\TestLocation\MessageIn に存在する要求 XML に基づいて要求メッセージが作成されるためです。
アプリケーションをビルドしてデプロイします。 負荷分散のデモンストレーションを行うには、少なくとも、BizTalk Serverと Oracle Database アダプターがインストールされている 2 台の異なるコンピューターにこのオーケストレーションを展開する必要があります。
両方のコンピューターのBizTalk Server管理コンソールで、WCF-Custom または受信場所に次のバインド プロパティ WCF-OracleDB 指定します。
Binding プロパティ 値 InboundOperationType これを [通知] に設定します。 NotificationPort Oracle データベースからのデータベース変更通知をリッスンするために ODP.NET 開く必要があるポート番号を指定します。 これを、Windows ファイアウォールの例外リストに追加する必要があるのと同じポート番号に設定します。 Windows ファイアウォールの例外の一覧にポートを追加する方法については、「」を参照してください https://go.microsoft.com/fwlink/?LinkID=196959。 大事な: これを既定値 -1 に設定した場合は、通知メッセージを受信するために Windows ファイアウォールを完全に無効にする必要があります。 NotificationStatement これを次のように設定します。
SELECT TID,ACCOUNT,PROCESSED FROM SCOTT.ACCOUNTACTIVITY WHERE PROCESSED = ‘n’
メモ: テーブル名とスキーマ名を指定する必要があります。 たとえば、「SCOTT.ACCOUNTACTIVITY
」のように入力します。NotifyOnListenerStart これを True に設定 します。 BizTalk アプリケーションを起動します。
通知の受信を開始するには、ACCOUNTACTIVITY テーブルに 100 個のレコードを挿入します。 その際、NOTIFY_LOAD_BALANCE プロシージャを呼び出すための要求 XML が C:\TestLocation\MessageIn で使用できることを確認します。
BizTalk アプリケーションが通知メッセージを削除する場所 (両方のコンピューター上) を監視します。 挿入された 100 個のレコードのうち、1 つの場所が一部のレコードの通知を受け取り、もう 1 つの場所が残りのレコードの通知を受け取ることがわかります。 両方の場所がまとめて、100 件のレコードすべてに対する通知を受け取ります。