コントラクト
コントラクトは、アプリケーションが特定のタスクを実行するために使用するメッセージの型を定義します。これは各サービスが特定のタスクを実行するために送信するメッセージについての 2 つのサービス間の取り決めです。コントラクトの定義は、その型が作成されたデータベースに保持されます。
メッセージ交換に参加する各データベースに同じコントラクトを作成します。たとえば、人事アプリケーションで従業員の ID を検証するとします。この場合、検証を要求する側のサービスでは、相手側のサービスがどの型のメッセージに対応しているのかがわかっていなければなりません。また、受け取ったメッセージを処理できるように、自分が受け取ることのできるメッセージの型も把握している必要があります。
コントラクトには、目的の作業を実行するために使用できるメッセージの型が指定されています。また、各メッセージ型をメッセージ交換のどちらの側が使用できるのかも指定されています。両方の側で送信できるメッセージ型もあれば、発信側か対象の一方しか送信できないメッセージ型もあります。コントラクトには、発信側によって送信されるメッセージ型か、両方の側によって送信されるメッセージ型が含まれている必要があります。それ以外の場合、そのコントラクトを使用するメッセージ交換を発信側で開始できません。
Service Broker には、DEFAULT という名前の組み込みのコントラクトも含まれています。DEFAULT コントラクトには、メッセージ型 SENT BY ANY のみが含まれています。BEGIN DIALOG ステートメントでコントラクトが指定されていない場合、Service Broker は DEFAULT コントラクトを使用します。
たとえば、SubmitRequest、ProcessRequest、および RequestStatus の各メッセージ型をコントラクトに含めることができます。SubmitRequest を使用できるのは発信側のエンドポイントだけで、ProcessRequest を送信できるのは対象のエンドポイントだけです。RequestStatus メッセージ型は、メッセージ交換の両方の側で送信できます。RequestStatus メッセージ型を使用すると、対象の処理の進行状況を調べたり、現在の要求に関連して行われている並列処理の状態を発信側で確認したりできます。