Exemplos de roteamento do Service Broker

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

Esta seção apresenta exemplos do processo de roteamento do Service Broker. Cada exemplo contém tabelas de roteamento de exemplo para AdventureWorks2008R2 e msdb e descreve como o Service Broker usa essas tabelas para escolher uma rota para a mensagem.

Observação

Os exemplos de código neste artigo foram testados usando o banco de dados de exemplo AdventureWorks2025, que você pode baixar da página inicial Microsoft SQL Server Samples and Community Projects.

As tabelas de roteamento apresentadas neste tópico são versões simplificadas da exibição do catálogo sys.routes. A ID da rota e o proprietário não são importantes para o processo de roteamento e todas as rotas são consideradas com tempo de vida indefinido.

Um valor de NULL na coluna remote_service_name corresponde a qualquer nome de serviço. Um valor de NULL na coluna broker_instance corresponde a qualquer identificador do Service Broker.

Os exemplos de mensagens de saída não usam a tabela msdbde roteamento e os exemplos para mensagens de entrada e encaminhamento de mensagens não usam a tabela de roteamento para AdventureWorks2008R2.

Exemplo 1: configuração padrão

Esse exemplo descreve a configuração padrão para roteamento do Service Broker. Por padrão, todos os bancos de dados, exceto master, contêm a AutoCreatedLocal rota. Portanto, as tabelas de roteamento para AdventureWorks2008R2 e msdb contêm as informações a seguir.

Coluna AdventureWorks2008R2 msdb
name AutoCreatedLocal AutoCreatedLocal
remote_service_name NULL NULL
broker_instance NULL NULL
address LOCAL LOCAL
mirror_address NULL NULL

Nesse caso, todos os diálogos criados no banco de dados AdventureWorks2008R2 são entregues a um serviço na instância atual. Além disso, todas as caixas de diálogo que chegam de fora da instância são entregues a um serviço na instância atual.

Para conversas criadas em AdventureWorks2008R2, AutoCreatedLocal é a única rota em AdventureWorks2008R2.sys.routes. Essa rota é a única no conjunto de rotas correspondentes, sendo que o Service Broker escolhe essa rota. Se o serviço da mensagem não existir na instância local, a mensagem será descartada.

O processo é o mesmo para conversas que chegam de fora da instância. Para conversas que chegam de fora da instância, AutoCreatedLocal é a única rota em msdb.sys.routes. Essa rota é a única no conjunto de rotas correspondentes, sendo que o Service Broker escolhe essa rota. Se o serviço da mensagem não existir na instância local, a mensagem será descartada.

Exemplo 2: Rota de rede para um serviço específico

Este exemplo descreve uma configuração normal de roteamento para serviços de fora da instância atual. Para configurar uma rota para um serviço externo, crie a rota no banco de dados que inicia a conversa. Neste exemplo, AdventureWorks2008R2 contém uma rota para o serviço OrderParts. A rota contém um endereço de rede para o OrderParts serviço.

Coluna AdventureWorks2008R2 AdventureWorks2008R2 msdb
name AutoCreatedLocal OrderPartsRoute AutoCreatedLocal
remote_service_name NULL OrderParts NULL
broker_instance NULL NULL NULL
address LOCAL TCP://host2.Adventure-Works.com:4022/ LOCAL
mirror_address NULL NULL NULL

Nesse caso, todos os diálogos criados no banco de dados AdventureWorks2008R2 para o serviço OrderParts correspondem à rota OrderPartsRoute. O Service Broker envia essas mensagens para o endereço TCP://host2.Adventure-Works.com:4022/de rede. Todas as outras conversas são entregues aos serviços da mesma instância.

Para conversas criadas em AdventureWorks2008R2 com um serviço de destino de OrderParts, o conjunto de rotas correspondentes contém OrderPartsRoute, porque essa rota corresponde exatamente ao nome do serviço. OrderPartsRoute é a única rota no conjunto de rotas correspondentes, portanto, o Service Broker escolhe essa rota.

Para conversas criadas em AdventureWorks2008R2 para um serviço de destino diferente, o conjunto de rotas correspondentes contém AutoCreatedLocal. Como essa é a única rota no conjunto de rotas correspondentes, o Service Broker escolhe essa rota. Se o serviço para a mensagem não existir na instância local, o Service Broker marcará a conversa DELAYED.

Para conversas que chegam de fora da instância, AutoCreatedLocal é a única rota em msdb.sys.routes. Essa rota é a única no conjunto de rotas correspondentes, sendo que o Service Broker escolhe essa rota. Se o serviço da mensagem não existir na instância local, a mensagem será descartada.

Exemplo 3: Rota de rede para um banco de dados espelhado

Esse exemplo descreve a configuração de roteamento normal para um serviço hospedado por um banco de dados espelhado de fora da instância atual. Para configurar uma rota para um serviço externo, crie a rota no banco de dados que inicia a conversa. Neste exemplo, AdventureWorks2008R2 contém uma rota para o serviço OrderParts. A rota contém um endereço de rede e um endereço espelho para o OrderParts serviço.

Coluna AdventureWorks2008R2 AdventureWorks2008R2 msdb
name AutoCreatedLocal OrderPartsRoute AutoCreatedLocal
remote_service_name NULL OrderParts NULL
broker_instance NULL NULL NULL
address LOCAL TCP://partner1.Adventure-Works.com:4022/ LOCAL
mirror_address NULL TCP://partner2.Adventure-Works.com:4022/ NULL

Para conversas criadas em AdventureWorks2008R2 com um serviço de destino de OrderParts, o conjunto de rotas correspondentes contém OrderPartsRoute, porque essa rota corresponde exatamente ao nome do serviço. OrderPartsRoute é a única rota no conjunto de rotas correspondentes, portanto, o Service Broker escolhe essa rota. O Service Broker verifica o endereço e o endereço de espelho para determinar o parceiro principal e depois envia a mensagem para o principal.

Para conversas criadas em AdventureWorks2008R2 para um serviço de destino diferente, o conjunto de rotas correspondentes contém AutoCreatedLocal. Como essa é a única rota no conjunto de rotas correspondentes, o Service Broker escolhe essa rota. Se o serviço para a mensagem não existir na instância local, o Service Broker marcará a conversa DELAYED.

Para conversas que chegam de fora da instância, AutoCreatedLocal é a única rota em msdb.sys.routes. Essa rota é a única no conjunto de rotas correspondentes, sendo que o Service Broker escolhe essa rota. Se o serviço da mensagem não existir na instância local, a mensagem será descartada.

Exemplo 4: Rota de rede para todos os serviços externos

Este exemplo envia mensagens de serviços em AdventureWorks2008R2 para outra instância, a menos que o serviço exista na instância local. As mensagens para todos os serviços que não estão na instância local vão para o mesmo endereço de rede. Essa configuração poderá ser útil se a instância do SQL Server nesse endereço de rede executar o encaminhamento de mensagens.

Neste exemplo, o AdventureWorks2008R2 banco de dados contém a AutoCreatedLocal rota, bem como uma rota para o endereço TCP://forwarding.Adventure-Works.com:4022/.

Coluna AdventureWorks2008R2 AdventureWorks2008R2 msdb
name AutoCreatedLocal ExternalRoute AutoCreatedLocal
remote_service_name NULL NULL NULL
broker_instance NULL NULL NULL
address LOCAL TCP://forwarding.Adventure-Works.com:4022/ LOCAL
mirror_address NULL NULL NULL

Para conversas criadas em AdventureWorks2008R2, o conjunto de rotas correspondentes contém ambos AutoCreatedLocal e ExternalRoute, como o nome do serviço remoto e a instância do agente são os mesmos para ambas as rotas. O Service Broker deve optar por uma dessas duas rotas. O Service Broker escolhe rotas com o endereço 'LOCAL' antes das rotas que especificam um endereço de rede, portanto, o Service Broker escolhe AutoCreatedLocalprimeiro . Se houver serviço de destino na instância local, o Service Broker usará essa rota para entregar a mensagem àquele serviço. No entanto, se o serviço de destino não existir na instância local, o Service Broker escolherá ExternalRoute.

Para conversas que chegam de fora da instância, AutoCreatedLocal é a única rota em msdb.sys.routes. Essa rota é a única no conjunto de rotas correspondentes, sendo que o Service Broker escolhe essa rota. Se o serviço da mensagem não existir na instância local, a mensagem será descartada.

Exemplo 5: Rota de rede para instâncias diferentes de um serviço

Esse exemplo mostra uma configuração de roteamento onde dois endereços de rede diferentes hospedam instâncias diferentes do mesmo serviço. Essa configuração pode ser útil para uma configuração de balanceamento de carga.

Neste exemplo, o AdventureWorks2008R2 banco de dados contém a AutoCreatedLocal rota, bem como rotas para o serviço BalancedService.

Coluna AdventureWorks2008R2 AdventureWorks2008R2 AdventureWorks2008R2 msdb
name AutoCreatedLocal BalancedRouteOne BalancedRouteTwo AutoCreatedLocal
remote_service_name NULL BalancedService BalancedService NULL
broker_instance NULL 5fb8d92b-ed69-4c80-afbb-2aa6a7d3cb2d 81b1d3d0-288e-4d2c-b1d3-456cbb944b4f NULL
address LOCAL TCP://server1.Adventure-Works.com:4022/ TCP://server2.Adventure-Works.com:4022/ LOCAL
mirror_address NULL NULL NULL NULL

Para conversações criadas no AdventureWorks2008R2 banco de dados e para o serviço BalancedService que não especificam um identificador do Service Broker, o conjunto de rotas correspondentes contém BalancedRouteOne e BalancedRouteTwo. Como as rotas contêm diferentes identificadores do Service Broker, o processo de correspondência seleciona arbitrariamente um identificador do Service Broker e corresponde a essa rota. Como apenas uma rota corresponde, o Service Broker escolhe essa rota para a conversa. O resultado é que algumas conversas são roteadas para TCP://server1.Adventure-Works.com:4022/, e outras conversas são roteadas para TCP://server2.Adventure-Works.com:4022/. No entanto, após o Service Broker receber uma confirmação de uma mensagem em uma conversa, ele usa o identificador de Service Broker contido na confirmação para outras mensagens da conversa. Após o recebimento da primeira confirmação, todas as mensagens futuras da conversa são roteadas com o identificador de Service Broker na confirmação.

Para conversas criadas no AdventureWorks2008R2 banco de dados para o serviço BalancedService que especificam um dos identificadores do Service Broker na tabela de roteamento, o conjunto de rotas correspondentes contém a rota que corresponde ao identificador do Service Broker. A conversa faz o roteamento para o endereço da rota com aquele identificador de Service Broker.

Para conversas criadas em AdventureWorks2008R2 para um serviço de destino diferente, o conjunto de rotas correspondentes contém apenas AutoCreatedLocal. O Service Broker escolhe essa rota. Se o serviço para a mensagem não existir na instância local, o Service Broker marcará a conversa DELAYED.

Para conversas que chegam de fora da instância, AutoCreatedLocal é a única rota em msdb.sys.routes. Essa rota é a única no conjunto de rotas correspondentes, sendo que o Service Broker escolhe essa rota. Se o serviço da mensagem não existir na instância local, a mensagem será descartada.

Exemplo 6: Encaminhamento de mensagens para um serviço específico

Este exemplo encaminha mensagens de fora da instância local para o serviço ElsewhereService para o endereço TCP://elsewhere.Adventure-Works.com:4022/de rede. Para todos os outros serviços, o Service Broker entrega as mensagens para um serviço na instância local ou marca a conversa DELAYED se o serviço não existir na instância local.

Coluna AdventureWorks2008R2 msdb msdb
name AutoCreatedLocal AutoCreatedLocal ForwardingRoute
remote_service_name NULL NULL ElsewhereService
broker_instance NULL NULL NULL
address LOCAL LOCAL TCP://elsewhere.Adventure-Works.com:4022/
mirror_address NULL NULL NULL

Para conversas criadas em AdventureWorks2008R2, AutoCreatedLocal é a única rota em AdventureWorks2008R2.sys.routes. Essa rota é a única no conjunto de rotas correspondentes, sendo que o Service Broker escolhe essa rota. Se o serviço para a mensagem não existir na instância local, o Service Broker marcará a conversa DELAYED. Uma conversa criada em AdventureWorks2008R2 para o serviço ElsewhereService não é roteada para TCP://elsewhere.Adventure-Works.com:4022/.

Para conversas que chegam de fora da instância para o serviço ElsewhereService, a rota ForwardingRoute corresponde exatamente ao nome do serviço. Portanto, ForwardingRoute é a única rota no conjunto de rotas correspondentes, e o Service Broker escolhe essa rota quando o encaminhamento de mensagens está ativado. O Service Broker escolhe essa rota mesmo que a instância local contenha o serviço ElsewhereService. Se o encaminhamento de mensagens estiver desabilitado, o Service Broker descartará a mensagem.

Para mensagens que chegam de fora da instância para todos os outros serviços, AutoCreatedLocal é a única rota correspondente em msdb.sys.routes. O Service Broker escolhe essa rota. Se o serviço da mensagem não existir na instância local, a mensagem será descartada.

Exemplo 7: Encaminhamento de mensagens para todos os serviços que não estão na instância

Esse exemplo envia mensagens de fora da instância local para uma instância diferente, a menos que o serviço exista na instância local. As mensagens para todos os serviços externos vão para o mesmo endereço de rede. Essa configuração pode ser útil para o encaminhamento de mensagens.

Coluna AdventureWorks2008R2 msdb msdb
name AutoCreatedLocal AutoCreatedLocal ForwardingRoute
remote_service_name NULL NULL NULL
broker_instance NULL NULL NULL
address LOCAL LOCAL TCP://forwarding.Adventure-Works.com:4022/
mirror_address NULL NULL NULL

Para conversas criadas em AdventureWorks2008R2, AutoCreatedLocal é a única rota em AdventureWorks2008R2.sys.routes. Essa rota é a única no conjunto de rotas correspondentes, sendo que o Service Broker escolhe essa rota. Se o serviço para a mensagem não existir na instância local, o Service Broker marcará a conversa DELAYED.

Para conversas que chegam de fora do banco de dados, o conjunto de rotas correspondentes contém ambas AutoCreatedLocal e ForwardingRoute, como ambas as rotas especificam o mesmo nome de serviço remoto e o identificador do Service Broker. O Service Broker deve optar por uma dessas duas rotas. O Service Broker escolhe rotas com o endereço 'LOCAL' antes das rotas que especificam um endereço de rede, portanto, o Service Broker escolhe AutoCreatedLocalprimeiro . Se houver serviço de destino na instância local, o Service Broker usará essa rota para entregar a mensagem àquele serviço. No entanto, se o serviço de destino não existir na instância local e o encaminhamento de mensagens estiver ativado, o Service Broker escolherá ForwardingRoute. Se o encaminhamento de mensagens não estiver ativado, o Service Broker removerá a mensagem se o serviço de destino não existir na instância local.