起動方法の選択

このトピックでは、Service Broker のアクティブ化方法について説明します。

Service Broker は、キューを使用した非同期メッセージングをサポートします。メッセージ交換が数日、数か月、または数年に及ぶ場合があるので、多くのアプリケーションはアクティブ化を使用して動的に対応しています。ここでは、Service Broker を使用するアプリケーションを起動するための一般的な方法について説明します。

起動方法

アプリケーションを起動する方法は、大きく次の 4 つに分類できます。

  • 内部アクティブ化
  • イベントベースのアクティブ化
  • 定期タスク
  • スタートアップ タスク

それぞれの方法には、異なる利点があります。1 つのアプリケーションで複数の方法を組み合わせることもできます。たとえば、大部分の時間は少数のキューで内部アクティブ化を行い、1 日数回スケジュールに従って多数のキュー リーダーを起動することができます。

内部アクティブ化

Service Broker 内部アクティブ化によって、Service Broker キュー モニタから必要なときにストアド プロシージャを直接アクティブ化できます。多くの場合、この方法が最も簡単です。ストアド プロシージャを直接アクティブ化できるので、アクティブ化を管理するコードをアプリケーションに追加する必要がありません。ただし、内部アクティブ化を行うには、アプリケーションが SQL Server ストアド プロシージャとして記述されている必要があります。内部アクティブ化を使用する場合、処理するメッセージがなくなったときに終了するようなアプリケーションを記述してください。

イベントベースのアクティブ化

一部のアプリケーションは特定のイベントに応答して実行されます。たとえば、コンピュータの CPU 使用率が一定のレベルを下回ったときにアプリケーションを実行できます。また、新しいテーブルを作成するときにログを記録するアプリケーションを実行できます。

Service Broker の外部アクティブ化は、イベントベースのアクティブ化の特殊な例です。外部アクティブ化では、アプリケーションが QUEUE_ACTIVATION イベントに応答して起動されます。

イベントをイベント通知で起動できる場合、イベントベースのアクティブ化と Service Broker の内部アクティブ化を組み合わせることができます。その際、イベント通知を受信するキューに内部アクティブ化を使用します。アクティブ化ストアド プロシージャが通知メッセージを受信してアプリケーションを起動します。

その他のイベントでは SQL Server エージェントを使用して、SQL Server を実行しているコンピュータのジョブを起動できます。リモート コンピュータから WMI (Windows Management Instrumentation) イベントを監視し、SQL Server を実行しているコンピュータで WMI イベントが発生したときにタスクを開始するアプリケーションを記述できます。

一般に、イベントベースのアクティブ化を行うときは、処理するメッセージがなくなったときにアプリケーションを終了します。

定期タスク

定期タスクを実行すると、設定したスケジュールに合わせてアプリケーションをアクティブ化できます。この方法は、バッチ処理アプリケーションに向いています。定期タスクとして実行されるアプリケーションは、処理するメッセージがなくなったとき、またはプログラムにより指定された任意の時点で終了できます。

たとえば、仕入れ業者への発注を処理するアプリケーションの場合、日中メッセージを保存しておき夜間に処理することで、仕入れ業者への発注を 1 つにまとめることができます。このようなアプリケーションでは、SQL Server エージェント ジョブにより、毎晩決められた時刻にアプリケーションを起動できます。

スタートアップ タスク

アプリケーションの中には、主にコンピュータまたは SQL Server の起動と同時に一度だけ起動するものがあります。たとえば、SQL Server のスタートアップ ストアド プロシージャ、Windows のスタートアップ グループに登録されたアプリケーション、または Windows サービスなどです。このようなアプリケーションは、実行を継続しながらメッセージが届いたときに処理します。継続的に実行するアプリケーションには、メッセージがキューに届いたときの起動時間が不要です。ただし、メッセージがない場合でもアプリケーションは終了しないので、プログラムで処理する作業がなくてもリソースが消費されます。

この方法は、一定のメッセージ ストリームを処理し、起動時のリソース消費が比較的多いアプリケーションに向いています。

参照

概念

Service Broker のアクティブ化

その他の技術情報

Creating SQL Server Agent Jobs

ヘルプおよび情報

SQL Server 2005 の参考資料の入手