次の方法で共有


Service Broker メッセージ転送

適用対象:SQL ServerAzure SQL Managed Instance

Service Broker のメッセージ転送によって、SQL Server のインスタンスはインスタンス外部からのメッセージを受け付けて、それらを別のインスタンスに送信することができます。

管理者は、メッセージ転送を以下の目的で使用できます。

  • 異なる信頼ドメイン内のサーバー間の接続を提供します。

  • ドメインのルーティング情報を保持する単一の一元化されたインスタンスを作成することで、管理を簡略化します。

  • 複数のインスタンス間で作業を分散します。

転送を有効にすると、 msdb.sys.routes のルーティング テーブルによって、別のインスタンスから到着したメッセージが転送されるかどうかが決定されます。 一致するルートのアドレスが LOCALされていない場合、SQL Server は指定されたアドレスにメッセージを転送します。 それ以外の場合は、メッセージはローカルに配信されます。

各 Service Broker メッセージには、最長有効期間と、メッセージが転送された回数を示すカウントが含まれています。 インスタンスがメッセージを転送すると、そのインスタンスはメッセージのカウントを増やします。 メッセージの最長有効期間が過ぎると、転送を行うインスタンスによってメッセージが破棄されます。 この戦略は、ルーティング ループが存在する可能性がある状況での問題を回避するのに役立ちます。

転送と信頼性の高い配信

メッセージを転送するインスタンスは、送信者にメッセージを受信確認しません。 最終的な宛先のみが、メッセージの受信確認を送信します。 送信者が一定期間後に送信先から受信確認を受信しない場合、送信者はメッセージを再試行します。

メッセージ転送を実行するインスタンスは、転送されたメッセージを格納する必要はありません。 転送されるメッセージは、代わりに、SQL Server によってメモリに保持されます。 メッセージ転送に利用できるメモリの量は、Service Broker エンドポイント構成の一部として指定します。 この方法によって、効率的でステートレスなメッセージ転送が可能になります。 メッセージ転送を実行するインスタンスが異常終了しても、メッセージは失われません。 各メッセージは、 Service Broker 通信プロトコルで説明されているように、最終的な宛先がメッセージを確認するまで、常に送信者に保持されます。

管理ビュー sys.dm_broker_forwarded_messages には、現在インスタンスによって転送中のメッセージに関する情報が含まれています。 インスタンスは転送中にメッセージを保持しません。これらのメッセージはメモリ内にのみ存在します。 メッセージを送信したインスタンス、およびメッセージを受信するインスタンスは、メッセージを保持します。 送信側インスタンスは、受信側のインスタンスがメッセージの受信を確認するまで、メッセージを削除しません。

セキュリティと転送

Service Broker メッセージ転送では、転送されたメッセージの暗号化を解除するために転送インスタンスは必要ありません。 したがって、メッセージ交換に関係するデータベースでのみ、ダイアログ セキュリティを構成しておく必要があります。

ただし、SQL Server インスタンス間の接続にはトランスポート セキュリティが適用されるため、各 SQL Server インスタンスでは、直接通信するインスタンスに対してトランスポート セキュリティが正しく構成されていることが必要です。 たとえば、転送を行うインスタンスを介してインスタンス A とインスタンス B が通信する場合は、インスタンス A と B の両方で、転送を行うインスタンスに対してトランスポート セキュリティを正しく構成しておく必要があります。 インスタンスは直接メッセージを交換しないため、インスタンスは相互に通信するようにトランスポート セキュリティを構成しないでください。