次の方法で共有


Service Broker で内部アクティブ化を実装する

適用対象:SQL ServerAzure SQL Managed Instance

このチュートリアルは、Service Broker は初めて使用するものの、データベースの概念と Transact-SQL ステートメントについては理解しているユーザーを対象としています。 これは、Service Broker メッセージを処理する内部アクティブ化ストアド プロシージャを実装する方法を示すことで、新しいユーザーが作業を開始するのに役立ちます。

概念

このチュートリアルでは、内部アクティブ化ストアド プロシージャを使用して、基本的な要求/応答 Service Broker の会話をサポートするために必要なデータベース オブジェクトを作成する方法について説明します。 その後、会話を開始し、それを使用してメッセージを送信します。

各 Service Broker メッセージ交換には、発信側と発信先があります。 要求/応答のメッセージ交換では、発信側から要求メッセージが送信され、発信先は応答メッセージを返します。 Service Broker の内部アクティブ化を使用すると、処理するメッセージが存在するときにストアド プロシージャを実行できます。 Service Broker は、多数のメッセージが転送される場合は、ストアド プロシージャの複数のコピーを実行できます。 このチュートリアルでは、発信先で要求メッセージを受信するストアド プロシージャを作成する方法と、内部アクティブ化を使用してストアド プロシージャを実行するように発信先を構成する方法を示します。

このレッスンでは、次のタスクを実行する方法について説明します。

  • 発信先のサービスとキュー、および発信側のサービスとキューを作成する。

  • 要求メッセージ型と応答メッセージ型を作成する。

  • 発信側から発信先に送信される要求メッセージと、発信先から発信側に送信される応答メッセージを指定するコントラクトを作成する。

  • ターゲット キューからの要求メッセージを受信し、発信側に応答メッセージを送信するストアド プロシージャを作成する。

  • ターゲット キューを変更してストアド プロシージャの内部アクティブ化を有効にする。

次に、基本的な会話を実行します。

  • メッセージ交換を開始する。

  • 発信側から発信先に要求を送信する。

  • その後、Service Broker によってストアド プロシージャがアクティブ化されます。 ストアド プロシージャは、ターゲットで要求を受信し、イニシエーターに応答を送信します。

  • 発信側で応答を受信する。

  • 発信側でのメッセージ交換を終了する。

  • その後、Service Broker はストアド プロシージャを 2 回目にアクティブ化し、ストアド プロシージャは会話のターゲット側を終了します。

メッセージは、データベース エンジンの同じインスタンスで両端を持つ会話用にネットワーク経由で送信されません。 データベース エンジンのセキュリティとアクセス許可により、承認された原則へのアクセスが制限されます。 このシナリオでは、ネットワーク暗号化は必要ありません。

このチュートリアルは、次のレッスンに分かれています。

レッスン Description
レッスン 1: 基本会話オブジェクトを作成する 基本的な Service Broker 会話をサポートするために必要なメッセージの種類、コントラクト、サービス、キューを作成します。
レッスン 2: 内部アクティブ化手順を作成する ターゲット キューからメッセージを受信するストアド プロシージャを作成し、内部アクティブ化を指定するようにターゲット キューを変更します。
レッスン 3: 会話を開始してメッセージを送信する 会話を開始し、イニシエーターからターゲットに要求メッセージを送信して、基本的な会話を完了します。 内部アクティブ化ストアド プロシージャは、要求メッセージを受け取り、応答メッセージを返します。 次に、メッセージ交換のイニシエーター側を終了し、ストアド プロシージャは会話のターゲット側を終了します。
レッスン 4: 会話オブジェクトを削除する 会話をサポートするために作成されたオブジェクトを削除します。

要件

このチュートリアルを完了するには、Transact-SQL 言語と、SQL Server Management Studio で Database Engine Query Editor を使用する方法に精通している必要があります。 サンプル データベースのdb_ddladminまたはAdventureWorks2025固定データベース ロール、または sysadmin 固定サーバー ロールのメンバーである必要があります。

システムには次のコンポーネントがインストールされている必要があります。