Остановка и запуск приложений компонента Service Broker

Иногда бывает необходимо временно остановить приложение компонента Service Broker. Например, можно остановить работающее приложение, чтобы установить обновленную версию хранимой процедуры активации для очереди. Хотя очередь можно изменить, не останавливая приложение, уже запущенные копии хранимой процедуры активации могут постоянно обрабатывать сообщения и поэтому так и не завершить работу. В этом случае остановка очереди приводит к немедленному выходу из хранимой процедуры. При повторном запуске службы компонент Service Broker запускает обновленную хранимую процедуру активации.

Сведения из этого раздела относятся к случаю временной остановки приложения для обслуживания. Дополнительные сведения о полном удалении службы из базы данных см. в разделе Удаление приложений, работающих с компонентом Service Broker.

Чтобы временно остановить службу, измените используемую приложением очередь, чтобы ее состояние было равно OFF. Если состояние очереди равно OFF, она недоступна для операций получения, и это равносильно остановке работы приложения. Компонент Service Broker не доставляет новые сообщения в очередь и не разрешает приложению получать их из очереди. Если приложение пытается получить сообщение из недоступной для него очереди, приложение получает ошибку Transact-SQL. Приложение в любой момент может вызвать для диалога инструкцию END CONVERSATION, независимо от того, доступна или недоступна очередь, которую использует этот диалог. Однако компонент Service Broker не доставляет сообщение «End Dialog» удаленной службе, пока очередь не становится доступной.

Если в остановленную очередь доставляется сообщение, компонент Service Broker задерживает его в очереди передачи базы данных, пока не становится доступной целевая очередь. Компонент Service Broker не считает ошибкой доставку сообщения в остановленную очередь и не извещает отправителя. Когда очередь становится доступной, компонент Service Broker доставляет сообщение, находящееся в очереди передачи, в очередь обслуживания. Такая доставка использует для сообщений обычную логику повторных попыток. Сообщения в очереди передачи маркируются как отложенные, и периодически выполняются попытки их доставки. Компонент Service Broker задерживает сообщение в очереди передачи и откладывает его доставку независимо от того, было ли оно создано в том же экземпляре, к которому относится очередь, или поступило из сети.

Остановка очереди не сбрасывает таймер диалога или таймер времени существования диалога для сообщений в этой очереди. Если время любого таймера истекает, компонент Service Broker формирует соответствующее сообщение, когда очередь снова запускается.

Чтобы перезапустить приложение, измените состояние используемой им очереди на ON. Тем самым очередь запускается. Если в очереди имеется хранимая процедура активации, и в ней хранятся сообщения, компонент Service Broker при запуске очереди немедленно запускает хранимую процедуру активации. Так как очередь теперь доступна, компонент Service Broker также формирует сообщения для таймеров диалога и таймеров времени существования двусторонних диалогов, сроки которых истекли, пока очередь была остановлена. Не использующее активацию приложение перезапускается с помощью процедуры запуска, определенной для этого приложения.

См. также

Основные понятия

Запуск и остановка очереди
Удаление приложений, работающих с компонентом Service Broker

Другие ресурсы

ALTER QUEUE (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005