Encaminhamento de mensagens do Service Broker

O encaminhamento de mensagens do Agente de Serviços permite que uma instância do SQL Server aceite mensagens de fora da instância e envie essas mensagens para uma instância diferente.

Um administrador pode usar encaminhamento de mensagem para:

  • Fornecer conectividade entre servidores em domínios de monopólios diferentes

  • Simplificar a administração criando uma instância centralizada única que contém informações de roteamento para um domínio

  • Distribuir trabalho entre várias instâncias

Quando o encaminhamento está habilitado, a tabela de roteamento em msdb.sys.routes determina se a mensagem que chega de outra instância deve ser encaminhada. Se o endereço da rota correspondente não for LOCAL, o SQL Server encaminhará a mensagem para o endereço especificado. Caso contrário, a mensagem será entregue localmente.

Cada mensagem do Agente de Serviços contém um tempo de vida máximo e uma contagem do número de vezes que a mensagem foi encaminhada. Quando uma instância encaminha a mensagem, aquela instância aumenta a contagem na mensagem. Se a mensagem exceder o tempo de vida máximo, a instância de encaminhamento descartará a mensagem. Essa estratégia ajuda a evitar problemas em situações onde um loop de roteamento possa existir.

Encaminhamento e entrega segura

Uma instância que encaminha uma mensagem não confirma a mensagem ao remetente. Somente o destino final confirma a mensagem. Se o remetente não receber uma confirmação do destino depois de um determinado tempo, o remetente enviará novamente a mensagem.

Uma instância que executa encaminhamento de mensagem não precisa armazenar mensagens encaminhadas. Em vez disso, o SQL Server mantém as mensagens a serem enviadas na memória. A quantidade de memória disponível para encaminhamento de mensagem é especificada como parte da configuração de ponto de extremidade do Agente de Serviços. Essa estratégia permite encaminhamento eficiente e sem monitoração de estado. Caso haja falha no encaminhamento de mensagem executado por uma instância, nenhuma mensagem será perdida. Cada mensagem sempre é mantida no remetente até que o destino final confirme a mensagem, como descrito em Protocolos de comunicação do Service Broker.

A exibição de gerenciamento sys.dm_broker_forwarded_messages contém informações sobre mensagens que estão atualmente no processo de serem enviadas pela instância. Uma instância não mantém mensagens no processo de serem encaminhadas; essas mensagens só existem na memória. A instância que enviou a mensagem e a instância que recebe a mensagem mantêm as mensagens. A instância que envia não remove a mensagem até que a instância receptora confirme o recebimento da mensagem.

Segurança e encaminhamento

O encaminhamento de mensagens do Agente de Serviços não exige que uma instância de encaminhamento descriptografe a mensagem encaminhada. Portanto, somente os bancos de dados que participam da conversação devem ter segurança de diálogo configurada.

Entretanto, como a segurança do transporte aplica-se a conexões entre instâncias do SQL Server, cada instância do SQL Server deve ter segurança de transporte corretamente configurada para as instâncias com as quais se comunica diretamente. Por exemplo, se a Instância A e a Instância B se comunicam através de uma instância de encaminhamento, então a Instância A e a Instância B devem ter segurança de transporte corretamente configurada para a instância de encaminhamento. Como as instâncias não trocam mensagens diretamente, as instâncias não devem ter segurança de transporte configurada para comunicação entre elas.