次の方法で共有


Service Broker アプリケーション

適用対象:SQL ServerAzure 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ステートメントは、会話を会話グループ間で移動します。 このステートメントでは、移動元と移動先の両方のメッセージ交換グループをロックします。