同じデータベース内の同じテーブル (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 の受信場所に対して次のバインド プロパティを指定します。
バインディングプロパティ 価値 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 つの場所が一部のレコードの通知を受け取り、もう一方の場所は残りのレコードの通知を受け取ります。 両方の場所が 100 件すべてのレコードの通知を受け取ります。