BEGIN CONVERSATION TIMER (Transact-SQL)
タイマを開始します。タイムアウトになると、Service Broker によって、メッセージ交換用のローカル キューに https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer の型のメッセージが配置されます。
構文
BEGIN CONVERSATION TIMER ( conversation_handle ) TIMEOUT = timeout [ ; ]
引数
- BEGIN CONVERSATION TIMER (conversation_handle)
メッセージ交換を定刻に指定します。この conversation_handle は、uniqueidentifier であることが必要です。
- TIMEOUT
メッセージをキューに配置する前に待機する時間を、秒単位で指定します。
解説
メッセージ交換タイマによって、特定の時間が経過すると、メッセージ交換でメッセージを受信する方法がアプリケーションに提供されます。タイマが時間切れになる前にメッセージ交換で BEGIN CONVERSATION TIMER を呼び出すと、タイムアウトが新しい値に設定されます。メッセージ交換の有効期間とは異なり、メッセージ交換の送信側と受信側に個別のメッセージ交換タイマがあります。DialogTimer メッセージは、リモート側のメッセージ交換に影響することなくローカル キューに届きます。したがって、タイマ メッセージはアプリケーションでどのような目的にも使用できます。
たとえばメッセージ交換タイマを使用すると、アプリケーションで、期限の切れた応答に対する待機時間を短くすることができます。アプリケーションが 30 秒以内にダイアログを完了するようにする場合、そのダイアログのメッセージ交換タイマを 60 秒 (30 秒に 30 秒の猶予時間を加えたもの) に設定できます。ダイアログが 60 秒後もまだ開いている場合、アプリケーションはそのダイアログのキューでタイムアウト メッセージを受信します。
また、アプリケーションはメッセージ交換タイマを使用して、特定の時間にアクティブ化を要求できます。たとえば、数分ごとにアクティブな接続数を報告するサービス、またはオープンな予約発注数を毎晩報告するサービスを作成できます。このサービスでは、メッセージ交換タイマを希望する時間に終了するように設定します。タイマが終了すると、Service Broker によって DialogTimer メッセージが送信されます。DialogTimer メッセージにより、Service Broker でキュー用のアクティブ化ストアド プロシージャが開始します。このストアド プロシージャによって、メッセージがリモート サービスに送信され、メッセージ交換タイマが再開します。
BEGIN CONVERSATION TIMER は、ユーザー定義の関数では無効です。
権限
メッセージ交換タイマの設定権限は、既定では、メッセージ交換用サービスに対する SEND 権限を持つユーザー、sysadmin 固定サーバー ロールのメンバ、および db_owner 固定データベース ロールのメンバに与えられています。
例
次の例では、@dialog_handle
で指定されるダイアログに 2 分間のタイムアウトを設定します。
-- @dialog_handle is of type uniqueidentifier and
-- contains a valid conversation handle.
BEGIN CONVERSATION TIMER (@dialog_handle)
TIMEOUT = 120 ;
参照
関連項目
BEGIN DIALOG CONVERSATION (Transact-SQL)
END CONVERSATION (Transact-SQL)
RECEIVE (Transact-SQL)