CREATE BROKER PRIORITY (Transact-SQL)

Aplica-se a:SQL ServerInstância Gerenciada de SQL do Azure

Define um nível de prioridade e o conjunto de critérios para determinar quais conversas do Service Broker devem ser atribuídas ao nível de prioridade. O nível de prioridade é atribuído a qualquer ponto de extremidade de conversa que use a mesma combinação de contratos e serviços especificada na prioridade de conversa. As prioridades variam em valor, de 1 (baixa) a 10 (alta). O padrão é 5.

Convenções de sintaxe de Transact-SQL

Sintaxe

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 } ]  
       )  
]  
[;]  
  

Observação

Para exibir a sintaxe do Transact-SQL para o SQL Server 2014 (12.x) e versões anteriores, confira a Documentação das versões anteriores.

Argumentos

ConversationPriorityName
Especifica o nome desta prioridade de conversa. O nome precisa ser exclusivo no banco de dados atual e estar em conformidade com as regras para identificadores do Mecanismo de Banco de Dados.

SET
Especifica os critérios para determinar se a prioridade de conversa é aplicável a uma conversa. Se for especificado, SET deve conter pelo menos um critério: CONTRACT_NAME, LOCAL_SERVICE_NAME, REMOTE_SERVICE_NAME ou PRIORITY_LEVEL. Se SET não for especificado, os padrões serão fixos para os três critérios.

CONTRACT_NAME = {ContractName | ANY}
Especifica o nome de um contrato a ser usado como critério para determinar se a prioridade de conversa se aplica a uma conversa. ContractName é um identificador Mecanismo de Banco de Dados e precisa especificar o nome de um contrato no banco de dados atual.

ContractName
Especifica que a prioridade de conversa pode ser aplicada somente em conversas em que a instrução BEGIN DIALOG que iniciou a conversa tenha especificado ON CONTRACT ContractName.

ANY
Especifica que a prioridade de conversa pode ser se aplicada em qualquer conversa, independentemente do contrato utilizado.

O padrão é ANY.

LOCAL_SERVICE_NAME = {LocalServiceName | ANY}
Especifica o nome de um serviço a ser usado como critério para determinar se a prioridade de conversa é aplicável a um ponto de extremidade de conversa.

LocalServiceName é um identificador do Mecanismo de Banco de Dados. Deve especificar o nome de um serviço no banco de dados atual.

LocalServiceName
Especifica que a prioridade de conversa pode ser se aplicada a:

  • Qualquer ponto de extremidade de conversa de iniciador cujo nome de serviço do iniciador corresponda a LocalServiceName.

  • Qualquer ponto de extremidade de conversa de destino cujo nome de serviço de destino corresponda a LocalServiceName.

ANY

  • Especifica que a prioridade de conversa pode ser aplicada em qualquer ponto de extremidade de conversa, independentemente do nome do serviço local usado pelo ponto de extremidade.

O padrão é ANY.

REMOTE_SERVICE_NAME = {'RemoteServiceName' | ANY}
Especifica o nome de um serviço a ser usado como critério para determinar se a prioridade de conversa é aplicável a um ponto de extremidade de conversa.

RemoteServiceName é um literal do tipo nvarchar(256). O Agente de Serviço usa uma comparação byte a byte para corresponder à cadeia de caracteres RemoteServiceName. A comparação diferencia maiúsculas de minúsculas e não considera a ordenação atual. O serviço de destino pode estar na instância atual do Mecanismo de Banco de Dados ou em uma instância remota do Mecanismo de Banco de Dados.

'RemoteServiceName'
Especifica que a prioridade de conversa pode ser se aplicada a:

  • Qualquer ponto de extremidade de conversa do iniciador cujo nome de serviço de destino associado corresponda a RemoteServiceName.

  • Qualquer ponto de extremidade de conversa de destino cujo nome de serviço do iniciador associado corresponda a RemoteServiceName.

ANY
Especifica que a prioridade de conversa pode ser aplicada em qualquer ponto de extremidade de conversa, independentemente do nome do serviço remoto associado ao ponto de extremidade.

O padrão é ANY.

PRIORITY_LEVEL = { PriorityValue | DEFAULT }
Especifica a prioridade a ser atribuída a qualquer ponto de extremidade da conversa que use os contratos e os serviços especificados na prioridade da conversa. PriorityValue precisa ser um inteiro literal de 1 (prioridade mais baixa) a 10 (prioridade mais alta). O padrão é 5.

Comentários

O Service Broker atribui níveis de prioridade a ponto de extremidade de conversação. Os níveis de prioridade controlam a prioridade das operações associadas ao ponto de extremidade. Cada conversa tem dois pontos de extremidade de conversa:

  • O ponto de extremidade de conversa de iniciador associa um lado da conversa ao serviço iniciador e à fila do iniciador. O ponto de extremidade de conversa do iniciador é criado quando a instrução BEGIN DIALOG é executada. As operações associadas ao ponto de extremidade de conversa do iniciador incluem:

    • Envia a partir do serviço iniciador.

    • Recebe da fila do iniciador.

    • Obter o próximo grupo de conversa da fila de iniciador.

  • O ponto de extremidade de conversa de destino associa o outro lado da conversa ao serviço de destino e à fila. O ponto de extremidade de conversa de destino é criado quando a conversa é usada para enviar uma mensagem à fila de destino. As operações associadas ao ponto de extremidade de conversa de destino incluem:

    • Recebe da fila de destino.

    • Envia do serviço de destino.

    • Obtendo o próximo grupo de conversa da fila de destino.

O Service Broker atribui níveis de prioridade de conversa durante a criação de pontos de extremidade de conversa. O ponto de extremidade de conversa retém o nível de prioridade até que a conversa termine. As novas prioridades ou as alterações de prioridades existentes não se aplicam às conversas existentes.

O Service Broker atribui ao ponto de extremidade de conversação o nível de prioridade da prioridade de conversa cujos critérios de serviço e de contrato melhor correspondem às propriedades do ponto de extremidade. A tabela a seguir apresenta a precedência de correspondência:

Contrato de operação Serviço local de operação Serviço remoto de operação
ContractName LocalServiceName RemoteServiceName
ContractName LocalServiceName ANY
ContractName ANY RemoteServiceName
ContractName ANY ANY
ANY LocalServiceName RemoteServiceName
ANY LocalServiceName ANY
ANY ANY RemoteServiceName
ANY ANY ANY

O Service Broker primeiro procura uma prioridade cujo contrato, serviço local e serviço remoto especificados correspondam aos usados pela operação. Se for encontrado algum, o Service Broker vai procurar uma prioridade com um contrato e um serviço local que correspondam àqueles usados pela operação, na qual o serviço remoto esteja especificado como ANY. Isso continua com relação a todas as variações listadas na tabela de prioridades. Se não houver correspondência, a prioridade padrão de 5 será atribuída à operação.

O Service Broker atribui um nível de prioridade de maneira independente a cada ponto de extremidade de conversação. Para que o Service Broker atribua níveis de prioridade aos pontos de extremidade de conversação iniciador e de destino, é preciso assegurar que os dois pontos estejam cobertos por prioridades de conversa. Se o iniciador e os pontos de extremidade de conversa de destino estiverem em bancos de dados separados, será necessário criar prioridades de conversa em todos os bancos de dados. O mesmo nível de prioridade é especificado, em geral, para os dois pontos de extremidade de conversa de uma conversa, mas é possível especificar níveis de prioridade diferentes.

Níveis de prioridade são sempre aplicados às operações que recebem mensagens ou identificadores de grupo de conversa de uma fila. Níveis de prioridade também são aplicados ao transmitir mensagens de uma instância do Mecanismo de Banco de Dados à outra.

Níveis de prioridade não são usados ao transmitir mensagens:

  • De um banco de dados onde a opção de banco de dados HONOR_BROKER_PRIORITY é definida como OFF. Para obter mais informações, veja Opções ALTER DATABASE SET (Transact-SQL).

  • Entre serviços na mesma instância do Mecanismo de Banco de Dados.

  • Todas as operações do Service Broker em um banco de dados receberão prioridades padrão iguais a 5 se nenhuma prioridade de conversa for criada no banco de dados.

Permissões

A permissão para criar uma prioridade de conversa assume como padrão os membros das funções de banco de dados fixas db_ddladmin ou db_owner e a função de servidor fixa sysadmin. Requer a permissão ALTER no banco de dados.

Exemplos

a. Atribuindo um nível de prioridade às duas direções de uma conversa.

Essas duas prioridades de conversa asseguram que a todas as operações que usam SimpleContract entre TargetService e InitiatorAService seja atribuído o nível de prioridade 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);  

B. Definindo o nível de prioridade para todas as conversas que usam um contrato

Atribui um nível de prioridade 7 a todas as operações que usam um contrato nomeado SimpleContract. Supõe-se que não há nenhuma outra prioridade que especifique SimpleContract e um serviço local ou remoto.

CREATE BROKER PRIORITY SimpleContractDefaultPriority  
    FOR CONVERSATION  
    SET (CONTRACT_NAME = SimpleContract,  
         LOCAL_SERVICE_NAME = ANY,  
         REMOTE_SERVICE_NAME = ANY,  
         PRIORITY_LEVEL = 7);  

C. Definindo um nível de prioridade básico para um banco de dados.

Define prioridades de conversa para dois serviços específicos e, em seguida, defina uma prioridade de conversa que corresponderá a todos os outros pontos de extremidade de conversa. Isso não substitui a prioridade padrão, que é sempre 5, mas minimiza o número de itens atribuídos ao padrão.

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);  

D. Criando três níveis de prioridade para um serviço de destino com o uso de serviços

Oferece suporte a um sistema que fornece três níveis de desempenho: Ouro (alto), Prata (meio) e Bronze (baixo). Há um contrato, mas cada nível tem um serviço iniciador separado. Todos os serviços de iniciador se comunicam com um serviço de destino central.

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);  

E. Criando três níveis de prioridade para vários serviços com o uso de contratos

Oferece suporte a um sistema que fornece três níveis de desempenho: Ouro (alto), Prata (meio) e Bronze (baixo). Cada nível tem um contrato separado. Estas prioridades se aplicam a qualquer serviço mencionado por conversas que usam os contratos.

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);  

Consulte Também

ALTER BROKER PRIORITY (Transact-SQL)
BEGIN DIALOG CONVERSATION (Transact-SQL)
CREATE CONTRACT (Transact-SQL)
CREATE QUEUE (Transact-SQL)
CREATE SERVICE (Transact-SQL)
DROP BROKER PRIORITY (Transact-SQL)
GET CONVERSATION GROUP (Transact-SQL)
RECEIVE (Transact-SQL)
SEND (Transact-SQL)
sys.conversation_priorities (Transact-SQL)