Exemplos de roteamento do Service Broker

Esta seção apresenta exemplos do processo de roteamento do Agente de Serviços. Todos os exemplos contêm tabelas de roteamento de exemplo para o AdventureWorks e o msdb e descrevem como o Agente de Serviços 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 Agente de Serviços.

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 AdventureWorks.

Exemplo 1: Configuração Padrão

Esse exemplo descreve a configuração padrão para roteamento do Agente de Serviços. 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 AdventureWorks e msdb contêm as informações a seguir.

AdventureWorks.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 AdventureWorks 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 conversações criadas no AdventureWorks, AutoCreatedLocal é a única rota em AdventureWorks.sys.routes. Essa rota é a única no conjunto de rotas correspondentes, sendo que o Agente de Serviços 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 conversações que chegam de fora da instância. Para conversações 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 Agente de Serviços escolhe essa rota. 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ção. Nesse exemplo, AdventureWorks conterá uma rota para o serviço OrderParts. A rota conterá um endereço de rede para o serviço OrderParts.

AdventureWorks.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 AdventureWorks para o serviço OrderParts correspondem à rota OrderPartsRoute. O Agente de Serviços envia essas mensagens para o endereço de rede tcp://host2.Adventure-Works.com: 4022/. Todas as outras conversações são entregues aos serviços da mesma instância.

Com relação às conversações criadas no AdventureWorks 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 Agente de Serviços escolhe a rota.

Com relação às conversações criadas no AdventureWorks para um serviço de destino diferente, o conjunto de rotas correspondentes conterá o AutoCreatedLocal. Essa rota é escolhida pelo Agente de Serviços por ser a única do conjunto de rotas correspondentes. Se não houver serviço para a mensagem na instância local, o Agente de Serviços marcará a conversação com DELAYED.

Para conversações 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 Agente de Serviços 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ção. Nesse exemplo, AdventureWorks contém 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.

AdventureWorks.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 conversações criadas no AdventureWorks 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 Agente de Serviços escolhe a rota. O Agente de Serviços 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 conversações criadas no AdventureWorks para um serviço de destino diferente, o conjunto de rotas correspondentes conterá o AutoCreatedLocal. Essa rota é escolhida pelo Agente de Serviços por ser a única do conjunto de rotas correspondentes. Se não houver serviço para a mensagem na instância local, o Agente de Serviços marcará a conversação com DELAYED.

Para conversações 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 Agente de Serviços 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 AdventureWorks 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 AdventureWorks contém a rota AutoCreatedLocal, assim como a rota para o endereço tcp://forwarding.Adventure-Works.com:4022/.

AdventureWorks.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 conversações criadas no AdventureWorks, 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 Agente de Serviços deve optar por uma dessas duas rotas. O Agente de Serviços opta por rotas com endereço 'LOCAL' prioritariamente a rotas que especificam o endereço de rede, de modo que o Agente de Serviços opta por AutoCreatedLocal. Se houver serviço de destino na instância local, o Agente de Serviços 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 Agente de Serviços escolherá ExternalRoute.

Para conversações 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 Agente de Serviços 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 AdventureWorks contém a rota AutoCreatedLocal, assim como rotas para o serviço BalancedService.

AdventureWorks.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 conversações criadas no banco de dados AdventureWorks para o serviço BalancedService, que não especificam um identificador de Agente de Serviços, o conjunto de rotas correspondentes conterá BalancedRouteOne e BalancedRouteTwo. Como as rotas contêm diferentes identificadores do Agente de Serviços, o processo de correspondência seleciona arbitrariamente um identificador do Agente de Serviços e cria correspondência para essa rota. Como apenas uma rota tem correspondência, o Agente de Serviços escolhe essa rota para a conversação. O resultado é que algumas conversações fazem roteamento para tcp://server1.Adventure-Works.com: 4022/; outras conversações para tcp://server2.Adventure-Works.com: 4022/. No entanto, após o Agente de Serviços receber uma confirmação de uma mensagem em uma conversação, ele usa o identificador de Agente de Serviços contido na confirmação para outras mensagens da conversação. Após o recebimento da primeira confirmação, todas as mensagens futuras da conversação são roteadas com o identificador de Agente de Serviços na confirmação.

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

Com relação às conversações criadas no AdventureWorks para um serviço de destino diferente, o conjunto de rotas correspondentes conterá apenas o AutoCreatedLocal. O Agente de Serviços escolhe essa rota. Se não houver serviço para a mensagem na instância local, o Agente de Serviços marcará a conversação com DELAYED.

Para conversações 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 Agente de Serviços 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 Agente de Serviços entrega as mensagens para um serviço na instância local ou marca a conversação com DELAYED caso o serviço não exista no banco de dados local.

AdventureWorks.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 conversações criadas no AdventureWorks, AutoCreatedLocal é a única rota em AdventureWorks.sys.routes. Essa rota é a única no conjunto de rotas correspondentes, sendo que o Agente de Serviços escolhe essa rota. Se não houver serviço para a mensagem na instância local, o Agente de Serviços marcará a conversação com DELAYED. Observe que uma conversação criada no AdventureWorks para o serviço ElsewhereService não faz roteamento para tcp://elsewhere.Adventure-Works.com: 4022/.

Com relação às conversações 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 Agente de Serviços escolhe essa rota quando o encaminhamento de mensagens está habilitado. O Agente de Serviços escolherá essa rota mesmo quando a instância local contiver o serviço ElsewhereService. Se o encaminhamento de mensagens estiver desabilitado, o Agente de Serviços descartará a mensagem.

Com relação a conversações que chegam de fora da instância para todos os outros serviços, AutoCreatedLocal é a única rota correspondente em msdb.sys.routes. O Agente de Serviços 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.

AdventureWorks.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 conversações criadas no AdventureWorks, AutoCreatedLocal é a única rota em AdventureWorks.sys.routes. Essa rota é a única no conjunto de rotas correspondentes, sendo que o Agente de Serviços escolhe essa rota. Se não houver serviço para a mensagem na instância local, o Agente de Serviços marcará a conversação com DELAYED.

Com relação às conversações 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 Agente de Serviços. O Agente de Serviços deve optar por uma dessas duas rotas. O Agente de Serviços opta por rotas com endereço 'LOCAL' prioritariamente a rotas que especificam o endereço de rede, de modo que o Agente de Serviços opta por AutoCreatedLocal. Se houver serviço de destino na instância local, o Agente de Serviços 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 Agente de Serviços escolherá ForwardingRoute. Se o encaminhamento de mensagens não estiver habilitado, o Agente de Serviços descartará a mensagem se o serviço de destino não existir na instância local.