Service Broker オブジェクトの作成

アプリケーションは、データベースで定義された Service Broker オブジェクトを操作する Transact-SQL ステートメントを実行することで、Service Broker を使用します。ここでは、アプリケーション向けに Service Broker オブジェクトを作成するときの一般的な考慮事項について説明します。

概要

Service Broker オブジェクトでは、特定のタスクのセットに対してメタデータとストレージが定義されます。

  • "メッセージ型" では、メッセージ交換で交換されるデータが定義されます。

  • "コントラクト" では、タスクが定義されます。各コントラクトでは、特定のメッセージ交換で使用できるメッセージ型を指定します。また、メッセージ交換のどちら側がメッセージを送信できるかを指定します。

  • "キュー" には、サービスに着信するメッセージが格納されます。

  • "サービス" は、関連する一連のビジネス タスクを表します。サービスの名前は、サービスのキューを探すためにも使用されます。

コントラクトは、1 つ以上のメッセージ型に依存します。サービスはキューに依存し、さらに 1 つ以上のコントラクトに依存することができます。したがって、コントラクトはメッセージ型よりも後に作成され、メッセージ型よりも前に削除されます。サービスはキューとコントラクトの後に作成され、キューとコントラクトの前に削除されます。

サービス用のオブジェクトの作成

サービスの作成の手順は、サービスが発信側サービスであるか、発信先サービスであるか、または両方であるかに関係なく、同じ基本概要に従います。

サービスの定義では、そのサービスを発信先にできるコントラクトを指定します。またアプリケーションでは、サービスを使用して、データベースに定義されたコントラクトを使用するメッセージ交換を開始できます。Service Broker では、この方法を使用して、サービスはアプリケーションが処理できるメッセージのみを受信する必要があるという一般的な規則を設定します。Service Broker は、不定の型や不明な型のメッセージをアプリケーションが受信しないようにするために、新しいダイアログがサービスで指定されたコントラクトに従っている場合に限り、そのダイアログを受け入れます。メッセージ交換を開始するときに、発信側サービスが使用するコントラクトを指定するので、発信側サービスはサービス定義にコントラクトを含める必要はありません。

サービス用のオブジェクトを作成するには、次の操作を行います。

  1. 必要な通信を実行するためにサービスが使用するメッセージを定義するメッセージ型を作成します。このようなメッセージ型はユーザー自身で定義できます。また、ユーザーのサービスが通信する相手側のサービスの作成者からスクリプトを入手して型を作成することもできます。サービスが必要とするメッセージ型がデータベースに既に含まれている場合は、この手順をスキップします。

  2. サービスが参加するメッセージ交換の構造を定義する 1 つ以上のコントラクトを作成します。このようなコントラクトはユーザー自身で定義できます。また、ユーザーのサービスが通信する相手側のサービスの作成者からスクリプトを入手してコントラクトを作成することもできます。サービスが必要とするコントラクトがデータベースに既に含まれている場合は、この手順をスキップします。

  3. キューを作成します。Service Broker では、このキューを使用してサービスに着信するメッセージを受信および格納します。キューの作成の詳細については、「CREATE QUEUE」を参照してください。各サービスにキューを作成する必要があります。プログラミングや管理を簡単にするために、一般的に、各サービスではそのサービス専用のキューを使用します。サービスがメッセージの保有を必要とする場合、キューにメッセージの保有を指定します。

  4. サービスを作成します。サービス定義では、サービスが使用するキューと、このサービスが発信先になるコントラクトを指定します。

多くの場合、発信先サービスを作成し、次に発信先サービスに作成されたコントラクトとメッセージ型を使用して、発信側サービスを作成します。ただし、既に定義されている発信側サービスの発信先サービスを作成することもあります。このような場合、発信先サービスでは、発信側サービスで使用されているメッセージ型とコントラクトを使用します。たとえば、イベント通知を受信する発信先サービスを作成している場合、コントラクト https://schemas.microsoft.com/SQL/Notifications/PostEventNotification を使用します。これは、このコントラクトが発信側サービスが使用するコントラクトであるためです。

オブジェクト定義の管理

アプリケーションで使用する Service Broker オブジェクトの Transact-SQL スクリプトを作成することをお勧めします。この Transact-SQL スクリプトにより、Service Broker オブジェクトの指定内容の参照が簡単になります。スクリプトによって、異なるシステムにサービスを配置したり、必要に応じてサービスを再作成する方法が提供されます。

アプリケーションが SQL Server インスタンス間でメッセージを送信する必要がある場合、サービスのメッセージ型とコントラクトを定義する 1 つのスクリプトを作成し、キューとサービスを定義する 2 つ目のスクリプトを作成することをお勧めします。最初のスクリプトでは、サービスのインターフェイス、発信側サービスと発信先サービスの両方に共通のオブジェクトを定義します。2 つ目のスクリプトでは、サービス名やキューのような、メッセージ交換のいずれか一方のオブジェクトを定義します。

このセクションの内容