Share via


ルート

Service Broker は、ルートを使用してメッセージの配信先を決定します。メッセージ交換でサービスからメッセージが送信されると、SQL Server はルートを使用してメッセージを受信するサービスを検索します。受信するサービスが応答すると、SQL Server は再びルートを使用して発信側サービスを検索します。既定では、明確なルートがないサービスのメッセージを SQL Server インスタンス内で配信するように指定するルートが各データベースに含まれています。

ルートには、次の 3 つの基本的な要素があります。

  • サービス名
    このルートの指定先のサービスの名前です。この名前は、BEGIN DIALOG コマンドの Service Name と正確に一致している必要があります。

  • ブローカ インスタンス識別子
    メッセージの送信先となる特定のデータベースの一意の識別子です。これは、このルートが指し示すデータベースの sys.databases テーブル行にある service_broker_guid 列です。

  • ネットワーク アドレス
    マシンの実際のアドレス、ローカル マシンへのルートを制限するキーワード、またはトランスポート層でサービス名からアドレスを推定することを示すキーワードです。ネットワーク アドレスには、サービスをホストするブローカのアドレス、または転送を行うブローカのアドレスを指定できます。

SQL Server は、メッセージ交換のルートを決定するために、BEGIN DIALOG CONVERSATION ステートメントで指定されたサービス名およびブローカ インスタンス識別子を、ルートに指定されているサービス名およびブローカ インスタンス識別子と照合します。サービス名が指定されていないルートは、任意のサービス名と照合します。ブローカ インスタンス識別子が指定されていないルートは、任意のブローカ インスタンス識別子と照合します。メッセージ交換で複数のルートが一致した場合、SQL Server は「Service Broker のルーティング」で説明されているとおりにルートを選択します。

SQL Server では、対象者が最初のメッセージを容認すると、そのメッセージ交換のすべての後続メッセージが、確実に同じデータベースにルーティングされるようになっています。ただし、同じメッセージ交換グループの他のメッセージ交換が、同じデータベースにルーティングされる保証はありません。関連するメッセージ交換のメッセージを同じデータベースにルーティングする必要があるアプリケーションでは、メッセージ交換を開始する際に、ブローカ インスタンス識別子を指定する必要があります。

各ユーザー データベースには、既定で AutoCreatedLocal というルートが含まれています。このルートは、任意のサービス名および任意のブローカ インスタンスと一致し、現在のインスタンス内でメッセージを配信するように指定します。メッセージ交換の発信側と対象の両方が同じ SQL Server インスタンスに存在する単純なシナリオでは、追加のルートは必要ありません。ただし、サービスごとにルートを作成しておけば、AutoCreatedLocal ルートが変更または削除された場合の安全対策となります。