Service Broker アプリケーションの停止と開始

Service Broker アプリケーションを一時的に停止する必要がある場合があります。たとえば、キューのアクティブ化ストアド プロシージャの更新バージョンをインストールするために、ビジーなアプリケーションを停止することがあります。アプリケーションを停止せずにキューを変更することはできますが、現在実行中のアクティブ化ストアド プロシージャのコピーがメッセージを処理し切れず、終了できない場合があります。この場合は、キューを停止すると、実行中のストアド プロシージャはすぐに終了します。サービスをもう一度開始すると、Service Broker によって更新されたアクティブ化ストアド プロシージャが開始されます。

このセクションの情報は、メンテナンスのためにアプリケーションを一時的に停止する場合に適用されます。データベースからのサービスの完全な削除の詳細については、「Service Broker アプリケーションのアンインストール」を参照してください。

サービスを一時的に停止するには、アプリケーションが使用するキューを変更して、キューの状態が OFF になるようにします。キューの状態が OFF の場合、キューは受信操作を実行できなくなり、その結果アプリケーションは停止します。Service Broker は新しいメッセージをキューに配信せず、アプリケーションはキューからメッセージを受信できなくなります。アプリケーションが使用不可のキューからメッセージを受信しようとすると、Transact-SQL エラーを受信します。アプリケーションは、メッセージ交換が使用しているキューを使用できるかどうかに関係なく、いつでもメッセージ交換で END CONVERSATION を呼び出すことができます。ただし、キューが使用可能になるまで、Service Broker は終了ダイアログ メッセージをリモート サービスに配信しません。

停止したキューにメッセージが到着すると、Service Broker は送信先のキューが使用可能になるまでデータベースの転送キューにメッセージを保留します。Service Broker は、停止したキューに到着したメッセージをエラーとは見なさないため、送信側には通知しません。キューが使用可能になると、Service Broker は転送キュー内のメッセージをサービス キューに配信します。この配信では、メッセージの通常の再試行ロジックが使用されます。メッセージは転送キュー内で "DELAYED" とマークされ、定期的に再試行されます。Service Broker は転送キュー内にメッセージを保留し、メッセージがキューと同じインスタンス内から発信されたか、またはネットワークから到着したかに関係なく、メッセージを遅延します。

キューを停止しても、キュー内のメッセージのメッセージ交換タイマまたはダイアログ有効期間タイマはリセットされません。キューが停止している間にいずれかのタイマの期限が切れると、Service Broker はキューが再開するときに、それに応じたメッセージを生成します。

アプリケーションを再起動するには、アプリケーションが使用しているキューを変更して、キューの状態を ON にします。これで、キューが開始されます。キューにアクティブ化ストアド プロシージャが指定され、メッセージが含まれている場合、Service Broker はキューが開始するとすぐにアクティブ化ストアド プロシージャを開始します。これでキューが使用可能になるので、Service Broker はキューの停止中に期限が切れたメッセージ交換タイマとダイアログ有効期間タイマのメッセージも生成します。アクティブ化を使用していないアプリケーションの場合は、そのアプリケーションに対して定義されているスタートアップ プロシージャを使用してアプリケーションを再起動します。