Compartilhar via


Rotas

O Service Broker usa rotas para determinar onde entregar mensagens. Quando um serviço envia uma mensagem em uma conversação, o SQL Server usa as rotas para localizar o serviço que receberá a mensagem. Quando esse serviço responde, o SQL Server usa as rotas novamente para localizar o serviço iniciador. Por padrão, cada banco de dados contém uma rota que especifica que as mensagens para qualquer serviço que não têm uma rota específica são entregues na instância do SQL Server.

Há três componentes básicos de uma rota:

  • Nome do serviço
    O nome do serviço para o qual essa rota especifica o endereçamento. Esse nome deve ser uma correspondência exata para o Service Name no comando BEGIN DIALOG.

  • Identificador de instância de agente
    Um identificador exclusivo para um banco de dados específico ao qual enviar as mensagens. Essa é a coluna service_broker_guid na linha da tabela sys.databases para o banco de dados ao qual essa rota aponta.

  • Endereços de rede
    Um endereço de máquina real, uma palavra-chave que restringe a rota para a máquina local ou que indica se a camada de transporte deduz o endereço com base no nome do serviço. Um endereço de rede pode ser o endereço do agente que hospeda o serviço ou de um agente de encaminhamento.

Para determinar a rota de uma conversação, o SQL Server associa o nome do serviço e o identificador da instância do agente especificados na instrução BEGIN DIALOG CONVERSATION ao nome do serviço e ao identificador da instância do agente especificados na rota. As rotas que não fornecem um nome de serviço correspondem a qualquer nome de serviço. As rotas que não fornecem um identificador de instância do agente correspondem a qualquer identificador de instância do agente. Quando mais de uma rota corresponder a uma conversação, o SQL Server selecionará uma rota, como descrito em Roteamento do Service Broker.

O SQL Server garante que depois que o destino confirma a primeira mensagem, todas as mensagens subseqüentes nessa conversação são roteadas para o mesmo banco de dados. No entanto, não é garantido que outras conversações no mesmo grupo de conversação sejam roteadas para o mesmo banco de dados. Se um aplicativo exigir que as mensagens nas conversações relacionadas sejam roteadas para o mesmo banco de dados, ele deverá fornecer um identificador de instância do agente quando iniciar uma conversação.

Por padrão, cada banco de dados de usuários contém o AutoCreatedLocal da rota. Essa rota corresponde a qualquer nome de serviço e instância do agente e especifica que a mensagem deve ser entregue na instância atual. Para cenários simples, nos quais o iniciador e o destino da conversação existem na mesma instância do SQL Server, nenhuma rota adicional é necessária. No entanto, a criação de uma rota para cada serviço ajuda a proteger contra a modificação ou o descarte da rota AutoCreatedLocal.