Compartilhar via


Roteamento dinâmico do Service Broker

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

Com relação à maior parte dos cenários, os aplicativos do Service Broker usam rotas configuradas por um administrador. Em alguns casos, pode ser necessário configurar as rotas dinamicamente. Nesse caso, implemente o serviço Broker Configuration Notice.

Visão geral do roteamento dinâmico

O SQL Server não oferece uma solução interna para criar tabelas de roteamento de maneira dinâmica. Em vez disso, o SQL Server oferece uma funcionalidade que permite aos desenvolvedores criar aplicativos que fornecem roteamento dinâmico.

Quando o Service Broker não consegue encontrar uma rota para uma conversa, ele verifica a tabela de roteamento para obter um serviço denominado SQL/ServiceBroker/BrokerConfiguration. Se houver uma entrada para esse serviço, o Service Broker criará uma nova conversa para o serviço e enviará uma mensagem à conversa, solicitando que seja criada uma rota. Quando termina a conversa para o BrokerConfiguration, o Service Broker tenta novamente rotear a mensagem. Se não houver nenhuma rota naquele momento, o Service Broker marcará todas as mensagens para a conversa como DELAYED. Após um tempo limite, o Service Broker solicitará novamente uma rota ao serviço BrokerConfiguration.

Criando o serviço Broker Configuration Notice

Para criar um serviço para o roteamento dinâmico, crie um serviço denominado SQL/ServiceBroker/BrokerConfiguration que aceite as conversas do contrato https://schemas.microsoft.com/SQL/ServiceBroker/BrokerConfigurationNotice. Em seguida, crie uma rota para o serviço na tabela de roteamento para o banco de dados que usará o roteamento dinâmico.

As solicitações de rotas usam o tipo de mensagem https://schemas.microsoft.com/SQL/ServiceBroker/BrokerConfigurationNotice/MissingRoute. A mensagem tem formato XML e contém o nome do serviço para o qual as informações de roteamento deverão estar disponíveis.

Por exemplo, a seguinte mensagem é uma solicitação de uma rota para o serviço https://Adventure-Works.com/Elsewhere:

    <MissingRoute xmlns="https://schemas.microsoft.com/SQL/ServiceBroker/BrokerConfigurationNotice/MissingRoute">
      <SERVICE_NAME>https://Adventure-Works.com/Elsewhere</SERVICE_NAME>
    </MissingRoute>

Para obter mais informações, confira Serviço de Aviso de Configuração do Service Broker.

Implementando o roteamento dinâmico

A maior parte do trabalho envolvido na implementação do roteamento dinâmico é determinar o endereço para o nome de serviço. Use qualquer técnica apropriada ao seu aplicativo.

As responsabilidades do aplicativo quanto ao serviço Broker Configuration Notice são simples. O aplicativo lê uma mensagem MissingRoute na fila. Se o aplicativo puder determinar o endereço do serviço, ele criará uma rota para o serviço e depois concluirá a conversa. Como o aplicativo determina o endereço depende das necessidades específicas do seu ambiente. Por exemplo, o aplicativo pode consultar um serviço externo, executar uma consulta em outro banco de dados ou produzir uma rota para um Service Broker configurado para encaminhamento de mensagens. No entanto, se o aplicativo não puder determinar o endereço do serviço, ele concluirá a conversa com um erro.

Observe que, em ambos os casos, o aplicativo que implementa o serviço Broker Configuration Notice conclui a conversa. O Service Broker envia uma mensagem MissingRoute por vez para um serviço específico, independentemente do número de conversas para o serviço. Além disso, o Service Broker usa o mais longo tempo limite possível para as solicitações ao serviço Broker Configuration. Portanto, se o serviço Broker Configuration não concluir a conversa, o Service Broker não criará uma nova solicitação para o serviço. Se o serviço Broker Configuration não tiver criado uma rota, ou se o tempo de vida da rota criada pelo serviço expirar, as mensagens para o serviço permanecerão atrasadas até que o tempo de vida da conversa expire.

Confira também