Share via


Exemplos de roteamento do Service Broker

Esta seção apresenta exemplos do processo de roteamento do Service Broker. Todos os exemplos contêm tabelas de roteamento de exemplo para o AdventureWorks2008R2 e o msdb e descrevem como o Service Broker usa essas tabelas de roteamento para selecionar uma rota para a mensagem.

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 como tendo tempo de vida indefinido.

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

Os exemplos de mensagens de saída não utilizam a tabela de roteamento em msdb, e os exemplos de mensagens de entrada e de encaminhamento de mensagens não utilizam a tabela de roteamento do 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, com exceção do mestre contêm a rota AutoCreatedLocal. Portanto, as tabelas de roteamento para o AdventureWorks2008R2 e msdb contêm as informações a seguir.

AdventureWorks2008R2.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

Nesse caso, todas as caixas de diálogo criadas 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 no 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 não houver serviço para a mensagem 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 a escolhe. Se não houver serviço para a mensagem na instância local, a mensagem será descartada.

Exemplo 2: Rota de rede para 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. Nesse exemplo, AdventureWorks2008R2 conterá uma rota para o serviço OrderParts. A rota conterá um endereço de rede para o serviço OrderParts.

AdventureWorks2008R2.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

OrderPartsRoute

OrderParts

NULL

tcp://host2.Adventure-Works.com:4022/

NULL

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

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

Com relação às conversas criadas no AdventureWorks2008R2 com um serviço de destino de OrderParts, o conjunto de rotas correspondentes conterá OrderPartsRoute, desde que a rota corresponda exatamente ao nome do serviço. OrderPartsRoute é a única rota do conjunto de rotas correspondentes, de modo que o Service Broker escolhe a rota.

Com relação às conversas criadas no AdventureWorks2008R2 para um serviço de destino diferente, o conjunto de rotas correspondentes conterá o AutoCreatedLocal. Essa rota é escolhida pelo Service Broker por ser a única do conjunto de rotas correspondentes. Se não houver serviço para a mensagem na instância local, o Service Broker marcará a conversa com 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 a escolhe. Se não houver serviço para a mensagem na instância local, a mensagem será descartada.

Exemplo 3: Rota de rede para 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. Nesse exemplo, AdventureWorks2008R2 conterá uma rota para o serviço OrderParts. A rota contém um endereço de rede e um endereço de espelho para o serviço OrderParts.

AdventureWorks2008R2.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

OrderPartsRoute

OrderParts

NULL

tcp://partner1.Adventure-Works.com: 4022/

tcp://partner2.Adventure-Works.com:4022/

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

Com relação às conversas criadas no AdventureWorks2008R2 com um serviço de destino de OrderParts, o conjunto de rotas correspondentes conterá OrderPartsRoute, desde que a rota corresponda exatamente ao nome do serviço. OrderPartsRoute é a única rota do conjunto de rotas correspondentes, de modo que o Service Broker escolhe a 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.

Com relação às conversas criadas no AdventureWorks2008R2 para um serviço de destino diferente, o conjunto de rotas correspondentes conterá o AutoCreatedLocal. Essa rota é escolhida pelo Service Broker por ser a única do conjunto de rotas correspondentes. Se não houver serviço para a mensagem na instância local, o Service Broker marcará a conversa com 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 a escolhe. Se não houver serviço para a mensagem na instância local, a mensagem será descartada.

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

Esse exemplo envia mensagens de serviços no AdventureWorks2008R2 para uma instância diferente, exceto se o serviço existir na instância local. Observe que as mensagens para quaisquer serviços que não sejam a instância local vão para o mesmo endereço de rede. Essa configuração poderá ser útil se a instância SQL Server nesse endereço de rede executar encaminhamento de mensagem.

Nesse exemplo, o banco de dados AdventureWorks2008R2 contém a rota AutoCreatedLocal, assim como a rota para o endereço tcp://forwarding.Adventure-Works.com:4022/.

AdventureWorks2008R2.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

ExternalRoute

NULL

NULL

tcp://forwarding.Adventure-Works.com:4022/

NULL

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

Com relação às conversas criadas no AdventureWorks2008R2, o conjunto de rotas correspondentes contém AutoCreatedLocal e ExternalRoute, porque o nome do serviço remoto e a instância do agente são os mesmos em ambas as rotas. O Service Broker deve optar por uma dessas duas rotas. O Service Broker opta por rotas com endereço 'LOCAL' prioritariamente a rotas que especificam o endereço de rede, de modo que o Service Broker opta por AutoCreatedLocal. Se houver serviço de destino na instância local, o Service Broker usará essa rota para entregar a mensagem àquele serviço. Porém, se não houver serviço de destino 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 a escolhe. Se não houver serviço para a mensagem 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.

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

AdventureWorks2008R2.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

BalancedRouteOne

BalancedService

5fb8d92b-ed69-4c80-afbb-2aa6a7d3cb2d

tcp://server1.Adventure-Works.com:4022/

NULL

BalancedRouteTwo

BalancedService

81b1d3d0-288e-4d2c-b1d3-456cbb944b4f

tcp://server2.Adventure-Works.com:4022/

NULL

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

Com relação às conversas criadas no banco de dados AdventureWorks2008R2 para o serviço BalancedService, que não especificam um identificador de Service Broker, o conjunto de rotas correspondentes conterá 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 cria correspondência para essa rota. Como apenas uma rota tem correspondência, o Service Broker escolhe essa rota para a conversa. O resultado é que algumas conversas fazem roteamento para tcp://server1.Adventure-Works.com: 4022/; outras conversas 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.

Com relação às conversas criadas no banco de dados do AdventureWorks2008R2 para o serviço BalancedService que especifica um dos identificadores de Service Broker na tabela de roteamento, o conjunto de rotas correspondentes conterá a rota que correspondente ao identificador de Service Broker. A conversa faz o roteamento para o endereço da rota com aquele identificador de Service Broker.

Com relação às conversas criadas no AdventureWorks2008R2 para um serviço de destino diferente, o conjunto de rotas correspondentes conterá apenas o AutoCreatedLocal. O Service Broker escolhe essa rota. Se não houver serviço para a mensagem na instância local, o Service Broker marcará a conversa com 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 a escolhe. Se não houver serviço para a mensagem na instância local, a mensagem será descartada.

Exemplo 6: Encaminhando mensagens para serviço específico

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

AdventureWorks2008R2.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

ForwardingRoute

ElsewhereService

NULL

tcp://elsewhere.Adventure-Works.com:4022/

NULL

Para conversas criadas no 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 não houver serviço para a mensagem na instância local, o Service Broker marcará a conversa com DELAYED. Observe que uma conversa criada no AdventureWorks2008R2 para o serviço ElsewhereService não faz roteamento para tcp://elsewhere.Adventure-Works.com:4022.

Com relação às conversas que chegam de fora da instância para o serviçoElsewhereService, a rota ForwardingRoute corresponde exatamente ao nome do serviço. Portanto, ForwardingRoute é a única rota do conjunto de rotas correspondentes e o Service Broker escolhe essa rota quando o encaminhamento de mensagens está habilitado. O Service Broker escolherá essa rota mesmo quando a instância local contiver o serviço ElsewhereService. Se o encaminhamento de mensagens estiver desabilitado, o Service Broker descartará a mensagem.

Com relação a conversas 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 não houver serviço para a mensagem na instância local, a mensagem será descartada.

Exemplo 7: Encaminhamento de mensagem para todos os serviços da 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. Observe que as mensagens de 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.

AdventureWorks2008R2.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

ForwardingRoute

NULL

NULL

tcp://forwarding.Adventure-Works.com:4022/

NULL

Para conversas criadas no 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 não houver serviço para a mensagem na instância local, o Service Broker marcará a conversa com DELAYED.

Com relação às conversas que chegam de fora do banco de dados, o conjunto de rotas correspondentes que contém AutoCreatedLocal e ForwardingRoute, porque 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 opta por rotas com endereço 'LOCAL' prioritariamente a rotas que especificam o endereço de rede, de modo que o Service Broker opta por AutoCreatedLocal. 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 não houver serviço de destino na instância local, o encaminhamento de mensagens estará habilitado e o Service Broker escolherá ForwardingRoute. Se o encaminhamento de mensagens não estiver habilitado, o Service Broker descartará a mensagem se o serviço de destino não existir na instância local.