Когда нет времени ждать выполнения задачи в дело вступает асинхронное программирование.
Представим что нужно выполнить 5 задач , если мы запустим их в SQL они будут выполняться последовательно, после запуска задачи процесс будет ждать завершения
и только после этого начнется следующая задача.
С помощью компонента Service Broker можно выносить выполнение задач во внешние приложения используя обмен сообщениями и управлением очередями сообщений.
Приложение может быть на другой машине таким образом настраивается масштабируемость без изменения работы логики основного приложения.
Если внешняя служба не доступна Service Broker будет помещать сообщения в очередь на отправку и возобновит работу когда служба будет доступна, без ущерба работы основного приложения, таким образом Service Broker гарантирует доставку сообщений.
Когда лучше использовать Service Broker
- Асинхронные триггеры
- Надежная обработка запросов
- Надежный сбор данных
- Распределенная серверная обработка для клиентских приложений
- Консолидация данных для клиентских приложений
- Широкомасштабная пакетная обработка
1.Включение Service Broker
1.Проверить состояние компонента Service Broker
SELECT name, is_broker_enabled
FROM sys.databases
2.Включить компонент Service Broker
ALTER DATABASE SERVICE_BROKER SET ENABLE_BROKER with rollback immediate
--отключить компонент
alter database SERVICE_BROKER set disable_broker with rollback immediate
--задать новый идентификатор Service Broker, удаляет все диалоги, необходимо заново пересоздать маршруты с новым идентификатором
alter database SERVICE_BROKER set new_broker
3. Включить безопасное взаимодействие
--Главный ключ базы данных — это симметричный ключ, который применяется для защиты закрытых ключей сертификатов
--и асимметричный ключей, которые есть в базе данных.
CREATE MASTER KEY ENCRYPTION BY PASSWORD ='dswfdsdgfdg3241df'
--посмотреть список ключей
select * from sys.symmetric_keys