CREATE BROKER PRIORITY (Transact-SQL)

Define um nível de prioridade e o conjunto de critérios para determinar quais conversações 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ção que usa a mesma combinação de contratos e serviços especificada na prioridade de conversação. As prioridades variam em valor, de 1 (baixa) a 10 (alta). O padrão é 5.

Ícone de vínculo de tópicoConvenções de sintaxe 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 } ]
       )
]
[;]

Argumentos

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

  • SET
    Especifica os critérios para determinar se a prioridade de conversação é aplicável a uma conversação. 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ção é aplicável a uma conversação. ContractName é um identificador do Mecanismo de Banco de Dados e deve especificar o nome de um contrato no banco de dados atual.

    • ContractName
      Especifica que a prioridade de conversação pode ser aplicada somente em conversações onde a instrução BEGIN DIALOG iniciou a conversação ON CONTRACT ContractName especificada.

    • ANY
      Especifica que a prioridade de conversação pode ser se aplicada em qualquer conversação, 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ção é aplicável a um ponto de extremidade de conversação.

    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ção pode ser se aplicada a:

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

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

    • ANY

      • Especifica que a prioridade de conversação pode ser aplicada em qualquer ponto de extremidade de conversação, 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ção é aplicável a um ponto de extremidade de conversação.

    O RemoteServiceName é uma literal do tipo nvarchar(256). O Service Broker usa uma comparação byte por byte para fazer a correspondência da cadeia de caracteres RemoteServiceName. A comparação diferencia maiúsculas de minúsculas e não considera o agrupamento 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ção pode ser se aplicada a:

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

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

    • ANY
      Especifica que a prioridade de conversação pode ser aplicada em qualquer ponto de extremidade de conversação, 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 de conversação que use os contratos e serviços especificados na prioridade de conversação. PriorityValue deve ser uma literal inteira 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 pontos de extremidade de conversação. Os níveis de prioridade controlam a prioridade das operações associadas ao ponto de extremidade. Cada conversação tem dois pontos de extremidade de conversação:

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

    • Enviar a partir do serviço iniciador.

    • Receber da fila do iniciador.

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

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

    • Receber da fila de destino.

    • Enviar a partir do serviço de destino.

    • Obter o próximo grupo de conversação da fila de destino.

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

O Service Broker atribui um nível de prioridade ao ponto de extremidade de conversação a partir da prioridade de conversação cujos critérios de serviço e contrato correspondam melhor às propriedades do ponto de extremidade. A tabela a seguir apresenta a prioridade 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 procura uma prioridade com contrato e 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 independentemente a cada ponto de extremidade de conversação. Para que o Service Broker atribua níveis de prioridade ao iniciador e aos pontos de extremidade de conversação de destino, é preciso assegurar que os dois pontos estejam cobertos por prioridades de conversação. Se o iniciador e os pontos de extremidade de conversação de destino estiverem em bancos de dados separados, será necessário criar prioridades de conversação em todos os bancos de dados. O mesmo nível de prioridade é especificado, em geral, para os dois pontos de extremidade de conversação de uma conversação, 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ção 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 para 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, consulte Opções ALTER DATABASE SET (Transact-SQL).

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

  • A todas as operações do Service Broker do banco de dados serão atribuídas prioridades padrão 5 se nenhuma prioridade de conversação tiver sido criada no banco de dados.

Permissões

A permissão para criar uma prioridade de conversação 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ção.

Essas duas prioridades de conversação 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 conversações 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ção para dois serviços específicos e, em seguida, defina uma prioridade de conversação que corresponderá a todos os outros pontos de extremidade de conversação. 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 usando 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 usando 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 conversações 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);