Compartilhar via


Service Broker com grupos de disponibilidade Always On (SQL Server)

Aplica-se a:SQL Server

Este tópico contém informações sobre como configurar o Service Broker para trabalhar com grupos de disponibilidade Always On no SQL Server.

Receber mensagens remotas de outras instâncias do Service Broker

  1. Certifique-se de que o grupo de disponibilidade possui um ouvinte.

    Para obter mais informações, consulte Criar ou Configurar um Listener de Grupo de Disponibilidade (SQL Server).

  2. Assegure-se de que o endpoint do Service Broker exista e esteja configurado corretamente.

    Em cada instância do SQL Server que hospeda uma réplica de disponibilidade para o grupo de disponibilidade, configure o endpoint do Service Broker, da seguinte forma:

    • Defina LISTENER_IP como 'TODOS'. Essa configuração permite conexões em qualquer endereço IP válido vinculado ao ouvinte do grupo de disponibilidade.

    • Defina a PORTA do Service Broker para o mesmo número de porta em todas as instâncias do servidor host.

      Dica

      Para visualizar o número da porta do ponto de extremidade do Service Broker em uma instância específica do servidor, consulte a coluna porta da exibição de catálogo sys.tcp_endpoints, em que type_desc = 'SERVICE_BROKER'.

    O exemplo a seguir cria um ponto de extremidade do Service Broker autenticado do Windows que usa a porta padrão do Service Broker (4022) e escuta todos os endereços IP válidos.

    CREATE ENDPOINT [SSBEndpoint]  
        STATE = STARTED  
        AS TCP  (LISTENER_PORT = 4022, LISTENER_IP = ALL )  
        FOR SERVICE_BROKER (AUTHENTICATION = WINDOWS)  
    

    Para obter mais informações, consulte CREATE ENDPOINT (Transact-SQL).

    Observação

    O SQL Server Service Broker não reconhece MultiSubnet. Defina RegisterAllProvidersIP como 0 e verifique se o cluster tem permissão necessária no DNS para usar endereços IP estáticos. Consulte sobre como configurar o ouvinte do grupo de disponibilidade para obter mais informações. O Service Broker pode atrasar a mensagem com o status "CONVERSING" tentando usar um endereço IP desativado.

  3. Conceda a permissão CONNECT no ponto de extremidade.

    Conceda permissão CONNECT no ponto de extremidade do Service Broker para PUBLIC ou para um login.

    O exemplo a seguir concede permissão de conexão a um endpoint do Service Broker chamado SSBEndpoint ao PUBLIC.

    GRANT CONNECT ON ENDPOINT::[SSBEndpoint] TO [PUBLIC]  
    

    Para obter mais informações, consulte GRANT (Transact-SQL).

  4. Verifique se msdb contém uma rota AutoCreatedLocal ou uma rota para o serviço específico.

    Observação

    Por padrão, cada banco de dados de usuário, incluindo msdb, contém a rota AutoCreatedLocal. Essa rota corresponde a qualquer nome de serviço e instância de agente e especifica que a mensagem deve ser entregue dentro da instância atual. AutoCreatedLocal tem prioridade menor do que rotas que especificam explicitamente um serviço específico que se comunica com uma instância remota.

    Para obter informações sobre como criar rotas, consulte Exemplos de roteamento do Service Broker (na versão SQL Server 2008 R2 (10.50.x) dos Livros Online) e CREATE ROUTE (Transact-SQL).

Requisitos para enviar mensagens para um serviço remoto em um grupo de disponibilidade

  1. Crie uma rota para o serviço de destino.

    Configure a rota da seguinte maneira:

    • Defina ADDRESS como o endereço IP do ouvinte do grupo de disponibilidade que hospeda o banco de dados de serviço.

    • Defina PORT como a porta especificada no ponto de extremidade do Service Broker de cada uma das instâncias remotas do SQL Server.

    O exemplo a seguir cria uma rota chamada RouteToTargetService para o serviço ISBNLookupRequestService. A rota tem como alvo o ouvinte do grupo de disponibilidade, MyAgListener, que usa a porta 4022.

    CREATE ROUTE [RouteToTargetService] WITH   
    SERVICE_NAME = 'ISBNLookupRequestService',   
    ADDRESS = 'TCP://MyAgListener:4022';  
    
    

    Para obter mais informações, consulte CREATE ROUTE (Transact-SQL).

  2. Verifique se msdb contém uma rota AutoCreatedLocal ou uma rota para o serviço específico. (Para obter mais informações, consulte Requisitos para um serviço em um grupo de disponibilidade para receber mensagens remotas, anteriormente neste tópico.)

Tarefas relacionadas

Ver também

Visão geral dos grupos de disponibilidade Always On (SQL Server)
Ouvintes de Grupo de Disponibilidade, Conectividade de Cliente e Comutação de Aplicações (SQL Server)
SQL Server Service Broker