Service Broker アプリケーション

Service Broker アプリケーションは、1 つ以上のプログラムとそれらのプログラムで使用するデータベース オブジェクトで構成されます。アプリケーションでは、サービスと呼ばれる独立したコンポーネント間でメッセージ交換を確立し、メッセージを交換して通信を行います。アプリケーションでは、SQL Server データベースで Transact-SQL ステートメントを実行することで、Service Broker を使用します。

アプリケーション コンポーネント

Service Broker アプリケーションは、次のコンポーネントで構成されます。

  • 1 つのタスクまたは関連する複数のタスクを実装する 1 つ以上のプログラム。SQL Server 外部では、SQL Server の Transact-SQL ステートメントを実行できる任意のプログラミング環境でアプリケーションを記述できます。SQL Server 内部では、Transact-SQL または CLR (共通言語ランタイム) 準拠の言語を使用して、ストアド プロシージャとしてアプリケーションを記述できます。

  • 他のサービスにタスクを公開するサービス。サービスとは、一連の関連タスクにアクセス可能な名前を提供する Service Broker オブジェクトです。他のサービスでは、このサービスとのメッセージ交換を開始して、タスクを実行します。

  • サービス間の通信に使用するメッセージの構造と方向を定義するコントラクトとメッセージ型。

  • サービスのメッセージを保持するキュー。

  • ルートとリモート サービス バインド (オプション)。ルートは、ネットワーク アドレスをリモート サービスの名前と関連付けます。リモート サービス バインドは、サービス名をローカルのデータベース プリンシパルと関連付けます。Service Broker では、指定のプリンシパルと関連付けられている証明書を使用して、リモート サービスの認証やリモート サービスと交換するメッセージの暗号化を行います。Service Broker では、配置したアプリケーションのルートとリモート サービス バインドを構成することが許可されています。その際、アプリケーションを変更する必要はありません。これにより、管理者は、アプリケーションのコードを変更することなく、サービスを移動したり、セキュリティ資格情報を変更することができます。ルートとリモート サービス バインドの構成の詳細については、「管理 (Service Broker)」を参照してください。

Service Broker DML

通常、アプリケーションでは、インストール時にサービス定義オブジェクトを設定します。アプリケーションは、実行中、メッセージの送受信に Service Broker DML (データ操作言語) を使用します。DML ステートメントは、メッセージ、メッセージ交換、およびメッセージ交換グループの 3 つに大別されます。

メッセージ

Service Broker では、メッセージを処理できるように次の操作を提供しています。

  • SEND ステートメントは、特定のメッセージ交換にメッセージを送信します。

  • RECEIVE ステートメントは、キューから 1 つ以上のメッセージを受信します。受信するメッセージは、すべて同じメッセージ交換グループに属しています。

メッセージ交換

Service Broker では、メッセージ交換を処理できるように次の操作を提供しています。

  • BEGIN DIALOG CONVERSATION ステートメントは、2 つのサービス間でメッセージ交換を開始します。このメッセージ交換には 2 つのサービスだけが関連しているので、メッセージ交換は対話になります。

  • END CONVERSATION ステートメントは、メッセージ交換の一方の側を終了します。

  • BEGIN CONVERSATION TIMER ステートメントは、指定の時刻に、メッセージ交換の一方の側にダイアログ タイマ メッセージを配信します。

  • GET_TRANSMISSION_STATUS ステートメントは、メッセージ交換の最後の転送エラーに関する説明を返します。メッセージ交換の最後のメッセージが正常に転送された場合、このステートメントから説明は返されません。

メッセージ交換グループ

Service Broker では、メッセージ交換グループの処理に対して次の 2 つの操作を提供しています。

  • GET CONVERSATION GROUP ステートメントは、キュー内の次に受信可能なメッセージのメッセージ交換グループを返します。また、このステートメントでは、メッセージ交換グループをロックします。

  • MOVE CONVERSATION ステートメントは、メッセージ交換を、あるメッセージ交換グループから別のメッセージ交換グループに移動します。このステートメントでは、移動元と移動先の両方のメッセージ交換グループをロックします。