適用対象:SQL Server
Azure SQL Managed Instance
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)」を参照してください。
サービスブローカー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ステートメントは、会話を会話グループ間で移動します。 このステートメントでは、移動元と移動先の両方のメッセージ交換グループをロックします。
関連コンテンツ
- 会話タイマーの開始 (Transact-SQL)
- 会話を始める(Transact-SQL)
- MOVE CONVERSATION (Transact-SQL)
- 会話グループの取得 (Transact-SQL)
- SEND (Transact-SQL)
- 会話の終了 (Transact-SQL)
- GET_TRANSMISSION_STATUS (Transact-SQL)
- RECEIVE (Transact-SQL)
- コントラクト
- ダイアログ会話
- 会話グループ
- メッセージの種類
- Messages (メッセージ)
- キュー
- サービス
- Service Broker を使用してアプリケーションを構築する
- リモート サービス バインド
- Routes