Запросы очередей
Иногда требуется изучить содержимое очереди в целом. Например, можно узнать, сколько сообщений содержится в очереди, или убедиться в том, что приложение обработало все сообщения, адресованные службе, которая переводится в автономный режим. Может потребоваться выяснить, почему приложение не обрабатывает сообщения.
Чтобы получить эти данные, используйте инструкцию SELECT с именем очереди в качестве таблицы-источника. Инструкция SELECT, выполняемая для очереди, имеет тот же формат, что и инструкция SELECT, служащая для получения данных из представления или таблицы.
Примечание |
---|
Компонент Service Broker разработан так, чтобы сразу несколько агентов чтения очереди могли эффективно получать сообщения из очереди. Тем не менее выполнение инструкции SELECT для очереди может привести к блокировке. Таким образом, используя для очереди инструкцию SELECT, укажите подсказку NOLOCK, чтобы предотвратить блокировку работающих с очередью приложений. |
Описание столбцов очереди см. в разделе CREATE QUEUE (Transact-SQL).
Далее представлен пример инструкции SELECT, определяющей число сообщений в очереди ExpenseQueue:
SELECT COUNT(*) FROM dbo.ExpenseQueue WITH (NOLOCK) ;
Следующая инструкция SELECT позволяет администратору узнать, содержит ли очередь ExpenseQueue какие-либо сообщения, адресованные службе //Adventure-Works.com/AccountsPayable/Expenses:
IF EXISTS(SELECT * FROM dbo.ExpenseQueue WITH (NOLOCK) WHERE
service_name = '//Adventure-Works.com/AccountsPayable/Expenses')
PRINT 'The queue contains messages for ' +
'//Adventure-Works.com/AccountsPayable/Expenses'
ELSE
PRINT 'The queue does not contain messages for ' +
'//Adventure-Works.com/AccountsPayable/Expenses' ;
Обновлениями очередей управляет компонент Service Broker. Хотя имя очереди может быть указано в качестве имени таблицы в инструкции SELECT, очередь не может быть целью инструкций INSERT, UPDATE, DELETE и TRUNCATE. SQL Server не позволяет пользователям создавать индексы для очередей.