CREATE BROKER PRIORITY (Transact-SQL)
Задает уровень приоритета и набор критериев для определения диалогов компонента Service Broker, которым нужно назначить уровень приоритета. Уровень приоритета назначается любой конечной точке диалога, которая использует то же сочетание контрактов и служб, указанное в приоритете диалога. Приоритеты должны находиться в диапазоне от 1 (низкий) до 10 (высокий). Значение по умолчанию равно 5.
Синтаксис
CREATE BROKER PRIORITY ConversationPriorityName
FOR CONVERSATION
[ SET ( [ CONTRACT_NAME = {ContractName | ANY } ]
[ [ , ] LOCAL_SERVICE_NAME = {LocalServiceName | ANY } ]
[ [ , ] REMOTE_SERVICE_NAME = {'RemoteServiceName' | ANY } ]
[ [ , ] PRIORITY_LEVEL = {PriorityValue | DEFAULT } ]
)
]
[;]
Аргументы
ConversationPriorityName
Задает имя данного приоритета диалога. Имя должно быть уникальным внутри текущей базы данных и должно соответствовать правилам для идентификаторов компонента Database Engine.SET
Задает критерий для определения применимости приоритета к заданному диалогу. Если указан, аргумент SET должен содержать хотя бы один критерий: CONTRACT_NAME, LOCAL_SERVICE_NAME, REMOTE_SERVICE_NAME или PRIORITY_LEVEL. Если аргумент SET не указан, устанавливаются значения по умолчанию для всех трех критериев.CONTRACT_NAME = {ContractName | ANY}
Указывает имя контракта, который будет использоваться в качестве критерия, определяющего применимость приоритета к диалогу. Параметр ContractName является идентификатором компонента Database Engine и должен задавать имя контракта в текущей базе данных.ContractName
Указывает, что приоритет может применяться только к диалогам, в которых инструкция BEGIN DIALOG, начинающая диалог, содержит параметр ON CONTRACT ContractName.ANY
Указывает, что приоритет может применяться к любому диалогу, независимо от используемого контракта.
Значение по умолчанию — ANY.
LOCAL_SERVICE_NAME = {LocalServiceName | ANY}
Указывает имя службы, которая будет использоваться в качестве критерия для определения применимости приоритета к конечной точке диалога.LocalServiceName является идентификатором компонента Database Engine. Должно быть указано имя службы в текущей базе данных.
LocalServiceName
Указывает, что объектом применения приоритета диалога может быть:любой конечной точке — инициатору диалога, имя вызывающей службы которой соответствует аргументу LocalServiceName;
любой целевой конечной точке диалога, имя целевой службы которой соответствует аргументу LocalServiceName.
ANY
- Указывает, что приоритет может применяться к любой конечной точке диалога, независимо от имени локальной службы, используемой точкой.
Значение по умолчанию — ANY.
REMOTE_SERVICE_NAME = {'RemoteServiceName' | ANY}
Указывает имя службы, которая будет использоваться в качестве критерия для определения применимости приоритета к конечной точке диалога.Аргумент RemoteServiceName является литералом типа nvarchar(256). Компонент Service Broker производит побайтовое сравнение при поиске соответствия строке RemoteServiceName. При сравнении учитывается регистр и не применяются текущие параметры сортировки. Целевая служба может располагаться в текущем экземпляре компонента Database Engine или в удаленном экземпляре компонента Database Engine.
'RemoteServiceName'
Указывает, что объектом применения приоритета диалога может быть:любая конечная точка — инициатор диалога, для которой имя целевой службы совпадает с параметром RemoteServiceName;
любая целевая конечная точка диалога, для которой имя вызывающей службы совпадает с параметром RemoteServiceName.
ANY
Указывает, что приоритет диалога может быть применен к любой конечной точке диалога, независимо от имени удаленной службы, связанной с конечной точкой.
Значение по умолчанию — ANY.
PRIORITY_LEVEL = { PriorityValue | DEFAULT }
Указывает приоритет, который назначается любой конечной точке диалога, которая использует контракты и службы, указанные в приоритете диалога. Аргумент PriorityValue должен быть целочисленным литералом в диапазоне от 1 (наименьший приоритет) до 10 (наибольший приоритет). Значение по умолчанию 5.
Замечания
Компонент Service Broker назначает уровни приоритета конечным точкам диалога. Уровни приоритета управляют приоритетом операций, связанных с конечной точкой. У каждого диалога есть две конечные точки:
Конечная точка — инициатор диалога связывает одну сторону диалога со службой и очередью инициатора. Конечная — точка-инициатор диалога создается во время выполнения инструкции BEGIN DIALOG. С конечной точкой — инициатором диалога связаны следующие операции:
отправка сообщений вызывающей службой;
получение сообщений из очереди инициатора;
получение следующей группы сообщений из очереди инициатора.
Целевая конечная точка диалога связывает противоположную сторону диалога с целевой службой и очередью. Целевая конечная точка диалога создается, когда диалог используется для отправки сообщения в очередь цели. С целевой конечной точкой диалога связаны следующие операции:
получение сообщений из очереди цели;
отправка сообщений целевой службы;
получение следующей группы сообщений из очереди целевой стороны.
Во время создания конечных точек диалога компонент Service Broker назначает уровни приоритета диалога. Конечная точка диалога поддерживает уровень приоритета до окончания диалога. К незавершенным диалогам не применяются новые приоритеты и изменения в текущих приоритетах.
Компонент Service Broker назначает конечной точке диалога уровень приоритета, критерии контракта и службы которого более всего совпадают со свойствами конечной точки. В следующей таблице показан порядок соответствия.
Контракт операции |
Локальная служба операции |
Удаленная служба операции |
---|---|---|
ContractName |
LocalServiceName |
RemoteServiceName |
ContractName |
LocalServiceName |
ANY |
ContractName |
ANY |
RemoteServiceName |
ContractName |
ANY |
ANY |
ANY |
LocalServiceName |
RemoteServiceName |
ANY |
LocalServiceName |
ANY |
ANY |
ANY |
RemoteServiceName |
ANY |
ANY |
ANY |
Компонент Service Broker в первую очередь ищет приоритет, в котором указаны контракт, локальная служба и удаленная служба, совпадающие с используемыми операцией. Если такой приоритет не найден, компонент Service Broker ищет приоритет, в котором контракт и локальная служба совпадают с используемыми операцией, а удаленная служба указана как ANY. Процесс продолжается для всех вариантов, перечисленных в таблице порядка соответствия. Если совпадения не обнаружено, операции назначается приоритет по умолчанию — 5.
Компонент Service Broker независимо назначает уровни приоритета каждой конечной точке диалога. Чтобы компонент Service Broker назначал уровни приоритета и для конечной точки вызывающей стороны, и для целевой конечной точки диалога, необходимо, чтобы приоритеты диалога распространялись на обе конечные точки. Если конечная точка-инициатор диалога и целевая конечная точка диалога расположены в разных базах данных, необходимо создать приоритеты диалога в каждой базе данных. Обычно обеим конечным точкам диалога назначается одинаковый уровень приоритета, но можно указать и различные уровни приоритета.
Уровни приоритетов всегда применяются к операциям, получающим из очереди сообщения или идентификаторы групп сообщений. Уровни приоритета также применяются при передаче сообщений от одного экземпляра компонента Database Engine другому.
Уровни приоритета не используются при передаче сообщений:
из базы данных, в которой параметр базы данных HONOR_BROKER_PRIORITY установлен в значение OFF. Дополнительные сведения см. в разделе Параметры ALTER DATABASE SET (Transact-SQL).
между службами в одном экземпляре компонента Database Engine.
Всем операциям компонента Service Broker в базе данных назначаются приоритеты по умолчанию 5, если в базе данных не создано приоритетов диалога.
Разрешения
Разрешение на создание приоритета диалога по умолчанию предоставляется членам предопределенных ролей базы данных db_ddladmin и db_owner, а также членам предопределенной роли сервера sysadmin. Необходимо разрешение ALTER на базу данных.
Примеры
А. Назначение уровня приоритета обоим направлениям диалога
Эти два приоритета диалога обеспечивают назначение всем операциям, в которых используется контракт SimpleContract между службами TargetService и InitiatorAService, уровня приоритета 3.
CREATE BROKER PRIORITY InitiatorAToTargetPriority
FOR CONVERSATION
SET (CONTRACT_NAME = SimpleContract,
LOCAL_SERVICE_NAME = InitiatorServiceA,
REMOTE_SERVICE_NAME = N'TargetService',
PRIORITY_LEVEL = 3);
CREATE BROKER PRIORITY TargetToInitiatorAPriority
FOR CONVERSATION
SET (CONTRACT_NAME = SimpleContract,
LOCAL_SERVICE_NAME = TargetService,
REMOTE_SERVICE_NAME = N'InitiatorServiceA',
PRIORITY_LEVEL = 3);
Б. Назначение уровня приоритета всем диалогам, которые используют контракт
Назначает уровень приоритета 7 всем операциям, которые используют контракт с именем SimpleContract. Предполагается, что не существует других приоритетов, которые в которых указаны одновременно контракт SimpleContract и локальная или удаленная служба.
CREATE BROKER PRIORITY SimpleContractDefaultPriority
FOR CONVERSATION
SET (CONTRACT_NAME = SimpleContract,
LOCAL_SERVICE_NAME = ANY,
REMOTE_SERVICE_NAME = ANY,
PRIORITY_LEVEL = 7);
В. Установка базового уровня приоритета для базы данных
Определяет приоритеты диалога для двух конкретных служб, а затем определяет приоритет диалога, который будет соответствовать всем другим конечным точкам диалога. Это не заменяет приоритет по умолчанию, который всегда имеет значение 5, но уменьшает число элементов, которые назначаются по умолчанию.
CREATE BROKER PRIORITY [//Adventure-Works.com/Expenses/ClaimPriority]
FOR CONVERSATION
SET (CONTRACT_NAME = ANY,
LOCAL_SERVICE_NAME = //Adventure-Works.com/Expenses/ClaimService,
REMOTE_SERVICE_NAME = ANY,
PRIORITY_LEVEL = 9);
CREATE BROKER PRIORITY [//Adventure-Works.com/Expenses/ApprovalPriority]
FOR CONVERSATION
SET (CONTRACT_NAME = ANY,
LOCAL_SERVICE_NAME = //Adventure-Works.com/Expenses/ClaimService,
REMOTE_SERVICE_NAME = ANY,
PRIORITY_LEVEL = 6);
CREATE BROKER PRIORITY [//Adventure-Works.com/Expenses/BasePriority]
FOR CONVERSATION
SET (CONTRACT_NAME = ANY,
LOCAL_SERVICE_NAME = ANY,
REMOTE_SERVICE_NAME = ANY,
PRIORITY_LEVEL = 3);
Г. Создание трех уровней приоритета для целевой службы с использованием служб
Поддерживает систему, обеспечивающую три уровня производительности: золотой (высокий), серебряный (средний) и бронзовый (низкий). Имеется один контракт, но каждый уровень располагает отдельной вызывающей службой. Все вызывающие службы связываются с центральной целевой службой.
CREATE BROKER PRIORITY GoldInitToTargetPriority
FOR CONVERSATION
SET (CONTRACT_NAME = SimpleContract,
LOCAL_SERVICE_NAME = GoldInitiatorService,
REMOTE_SERVICE_NAME = N'TargetService',
PRIORITY_LEVEL = 6);
CREATE BROKER PRIORITY GoldTargetToInitPriority
FOR CONVERSATION
SET (CONTRACT_NAME = SimpleContract,
LOCAL_SERVICE_NAME = TargetService,
REMOTE_SERVICE_NAME = N'GoldInitiatorService',
PRIORITY_LEVEL = 6);
CREATE BROKER PRIORITY SilverInitToTargetPriority
FOR CONVERSATION
SET (CONTRACT_NAME = SimpleContract,
LOCAL_SERVICE_NAME = SilverInitiatorService,
REMOTE_SERVICE_NAME = N'TargetService',
PRIORITY_LEVEL = 4);
CREATE BROKER PRIORITY SilverTargetToInitPriority
FOR CONVERSATION
SET (CONTRACT_NAME = SimpleContract,
LOCAL_SERVICE_NAME = TargetService,
REMOTE_SERVICE_NAME = N'SilverInitiatorService',
PRIORITY_LEVEL = 4);
CREATE BROKER PRIORITY BronzeInitToTargetPriority
FOR CONVERSATION
SET (CONTRACT_NAME = SimpleContract,
LOCAL_SERVICE_NAME = BronzeInitiatorService,
REMOTE_SERVICE_NAME = N'TargetService',
PRIORITY_LEVEL = 2);
CREATE BROKER PRIORITY BronzeTargetToInitPriority
FOR CONVERSATION
SET (CONTRACT_NAME = SimpleContract,
LOCAL_SERVICE_NAME = TargetService,
REMOTE_SERVICE_NAME = N'BronzeInitiatorService',
PRIORITY_LEVEL = 2);
Д. Создание трех уровней приоритета для нескольких служб с использованием контрактов
Поддерживает систему, обеспечивающую три уровня производительности: золотой (высокий), серебряный (средний) и бронзовый (низкий). У каждого уровня имеется отдельный контракт. Эти приоритеты применяются к любым службам, на которые ссылаются диалоги, использующие контракты.
CREATE BROKER PRIORITY GoldPriority
FOR CONVERSATION
SET (CONTRACT_NAME = GoldContract,
LOCAL_SERVICE_NAME = ANY,
REMOTE_SERVICE_NAME = ANY,
PRIORITY_LEVEL = 6);
CREATE BROKER PRIORITY SilverPriority
FOR CONVERSATION
SET (CONTRACT_NAME = SilverContract,
LOCAL_SERVICE_NAME = ANY,
REMOTE_SERVICE_NAME = ANY,
PRIORITY_LEVEL = 4);
CREATE BROKER PRIORITY BronzePriority
FOR CONVERSATION
SET (CONTRACT_NAME = BronzeContract,
LOCAL_SERVICE_NAME = ANY,
REMOTE_SERVICE_NAME = ANY,
PRIORITY_LEVEL = 2);
См. также