Service Broker アプリケーションの作成

ここでは、Service Broker アプリケーションの構造の一般的な概要について説明します。また、Service Broker を使用するアプリケーションを起動する場合の最も一般的な方法や、メッセージの受信および処理を行うための基本手順についても説明します。

発信側サービスのアプリケーションでは、BEGIN DIALOG ステートメントを使用して、各エンドポイントでのサービスや、アプリケーションが通信にする使用するサービス コントラクトに関する情報を指定します。次に、SEND ステートメントを使用して、メッセージ交換の最初のメッセージを発信先サービスに送信します。コントラクトで発信先サービスがメッセージを返すことが許可されていない場合でも、Service Broker からのメッセージを受信および処理する準備を行う必要があります。多くの場合、発信側のアプリケーションは、2 つの個別のコンポーネントとして実装されます。1 つのコンポーネントではメッセージ交換を開始し、もう 1 つのコンポーネントではキューに着信するメッセージを処理します。

発信先サービスのアプリケーションでは、発信側サービスからのメッセージを受信および処理します。Service Broker からメッセージを受信して処理する準備も行う必要があります。

サービスの必要性に応じて、キューを処理するアプリケーション部分をいくつか異なる方法で起動できます。Service Broker を使用するアプリケーションの起動方法の詳細については、「起動方法の選択」を参照してください。

アプリケーションが起動されると、そのアプリケーションはトランザクションを開始し、RECEIVE ステートメントを使用してメッセージをキューから取り出します。取り出したメッセージからデータを抽出し、必要な処理を行います。必要であれば、SEND ステートメントを使用して、メッセージ交換の相手側にメッセージを送信します。その後、トランザクションをコミットします。効率を上げるために、同じトランザクション内で複数のメッセージを処理できます。多くの場合、状態を保持するサービスでは、メッセージ交換グループをロックし、メッセージ交換グループの状態を取得してから、メッセージ交換グループの複数のメッセージを処理するために、GET CONVERSATION GROUP ステートメントを使用します。

SEND ステートメントと RECEIVE ステートメントを使用して、エンドポイント間でメッセージを転送することで、メッセージ交換を続行します。メッセージ交換のどちら側の参加者も、必要な場合はいつでも、BEGIN DIALOG を使用して、追加情報を取得するために他のサービスとメッセージ交換を開始できます。たとえば、イベント通知を処理するアプリケーションでは、警告を送信する前に現在の連絡先の情報を取得するために、個人情報を提供するサービスとの間で別のメッセージ交換を開始できます。

このような目的で他のサービスとのメッセージ交換が完了したときは、適切なエンドポイントのアプリケーションが END CONVERSATION ステートメントを使用してメッセージ交換を終了します。他の参加者は END CONVERSATION メッセージを受信したときに、同様に END CONVERSATION メッセージを発行します。両方の参加者が END CONVERSATION メッセージを発行すると、メッセージ交換が終了します。

エラーが発生した場合は、メッセージ交換のいずれかの参加者が WITH ERROR 句を使用してメッセージ交換を終了することで失敗したことを示します。WITH ERROR 句を使用してメッセージ交換を終了した場合は、メッセージ交換の他の参加者に Service Broker エラー メッセージが送信されます。

Service Broker でエラーが検出されたり、メッセージ交換の有効期限が切れると、Service Broker がメッセージ交換を終了し、アクティブな参加者にエラー メッセージが返されます。Service Broker がメッセージ交換を確立できない場合、唯一アクティブな参加者は発信側アプリケーションなので、その発信側サービスにエラーが配信されます。一方の参加者がメッセージ交換を既に終了している場合は、他方の参加者にエラー メッセージが配信されます。それ以外の場合は、メッセージ交換の両参加者にエラーが配信されます。

このセクションの内容