レッスン 1 : 基本のメッセージ交換オブジェクトの作成
このレッスンでは、データベースで、そのデータベース内でのメッセージ交換をサポート可能にするすべてのオブジェクトを構築する方法を学習します。
手順
Service Broker の有効化と AdventureWorks データベースへの切り替え
次のコードをコピーし、クエリ エディタ ウィンドウに貼り付けます。次にこのコードを実行し、AdventureWorks データベースで Service Broker を有効にして、このデータベースにコンテキストを切り替えます。
USE master; GO ALTER DATABASE AdventureWorks SET ENABLE_BROKER; GO USE AdventureWorks; GO
メッセージ型の作成
次のコードをコピーし、クエリ エディタ ウィンドウに貼り付けます。次にこのコードを実行し、メッセージ交換のメッセージ型を作成します。Service Broker オブジェクトはデータベース エンジンの複数のインスタンスで参照されることが多いので、ほとんどの Service Broker オブジェクトには URI 形式の名前が与えられます。これにより、オブジェクトが複数のコンピュータで一意であることが保証されます。これら 2 つのメッセージ型は、メッセージが適切な形式の XML ドキュメントであることを Service Broker が検証することを指定しますが、特定のスキーマに対して XML を検証することは指定しません。
CREATE MESSAGE TYPE [//AWDB/InternalAct/RequestMessage] VALIDATION = WELL_FORMED_XML; CREATE MESSAGE TYPE [//AWDB/InternalAct/ReplyMessage] VALIDATION = WELL_FORMED_XML; GO
コントラクトの作成
次のコードをコピーし、クエリ エディタ ウィンドウに貼り付けます。次にこのコードを実行し、メッセージ交換のコントラクトを作成します。コントラクトでは、このコントラクトを使用するメッセージ交換で、発信側から発信先には //AWDB/InternalAct/RequestMessage 型のメッセージを送信し、発信先から発信側には //AWDB/InternalAct/ReplyMessage 型のメッセージを送信する必要があることを指定します。
CREATE CONTRACT [//AWDB/InternalAct/SampleContract] ([//AWDB/InternalAct/RequestMessage] SENT BY INITIATOR, [//AWDB/InternalAct/ReplyMessage] SENT BY TARGET ); GO
発信先のキューおよびサービスの作成
次のコードをコピーし、クエリ エディタ ウィンドウに貼り付けます。次にこのコードを実行し、発信先で使用するキューおよびサービスを作成します。キューは同じデータベースからテーブルやビューと同じような方法で参照されるため、キュー名はテーブルやビューの名前と同じように書式設定されます。CREATE SERVICE ステートメントは、サービスを TargetQueueIntAct に関連付けます。したがって、サービスに送信されたすべてのメッセージは、TargetQueueIntAct で受信されます。また CREATE SERVICE は、既に作成した //AWDB/InternalAct/SampleContract を使用するメッセージ交換のみが、このサービスを発信先サービスとして使用できることを指定します。
CREATE QUEUE TargetQueueIntAct; CREATE SERVICE [//AWDB/InternalAct/TargetService] ON QUEUE TargetQueueIntAct ([//AWDB/InternalAct/SampleContract]); GO
発信側のキューおよびサービスの作成
次のコードをコピーし、クエリ エディタ ウィンドウに貼り付けます。次にこのコードを実行し、発信側で使用するキューおよびサービスを作成します。コントラクト名を指定していないため、他のサービスがこのサービスを発信先サービスとして使用することはできません。
CREATE QUEUE InitiatorQueueIntAct; CREATE SERVICE [//AWDB/InternalAct/InitiatorService] ON QUEUE InitiatorQueueIntAct; GO
次の手順
これで、//AWDB/InternalAct/InitiatorService と //AWDB/InternalAct/TargetService の間のメッセージ交換をサポートするように AdventureWorks を適切に構成できました。次に、発信先キューで内部アクティブ化をサポートするストアド プロシージャを作成します。「レッスン 2: 内部アクティブ化プロシージャの作成」を参照してください。