Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Azure SQL Managed Instance
Esta seção apresenta exemplos do processo de roteamento do Service Broker. Cada exemplo contém tabelas de roteamento de exemplo para AdventureWorks2008R2 e msdbe descreve como o Service Broker usa essas tabelas de roteamento para escolher uma rota para a mensagem.
Observação
Os exemplos de código neste artigo foram testados usando a base de dados de exemplo AdventureWorks2025, que pode ser descarregada da página inicial dos Microsoft SQL Server Samples and Community Projects .
As tabelas de roteamento apresentadas neste tópico são versões simplificadas da sys.routes exibição de catálogo. O 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 um 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 de roteamento em msdb, e os exemplos de mensagens de entrada e encaminhamento de mensagens não usam a tabela de roteamento para AdventureWorks2008R2.
Exemplo 1: Configuração padrão
Este 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 seguintes informações.
| Coluna | AdventureWorks2008R2 | msdb |
|---|---|---|
name |
AutoCreatedLocal |
AutoCreatedLocal |
remote_service_name |
NULL |
NULL |
broker_instance |
NULL |
NULL |
address |
LOCAL |
LOCAL |
mirror_address |
NULL |
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, todos os diálogos vindos de fora da instância são direcionados para um serviço na instância atual.
Para conversas criadas no AdventureWorks2008R2, AutoCreatedLocal é a única rota no AdventureWorks2008R2.sys.routes. Essa rota é a única rota no conjunto de rotas correspondentes, e o Service Broker escolhe essa rota. Se o serviço para a 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 no msdb.sys.routes. Essa rota é a única rota no conjunto de rotas correspondentes, e o Service Broker escolhe essa rota. Se o serviço para a 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 a configuração de roteamento típica para serviços 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 AdventureWorks2008R2 banco de dados 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 na mesma instância.
Para conversas criadas em AdventureWorks2008R2 com um serviço alvo de OrderParts, o conjunto de rotas correspondentes contém OrderPartsRoute, porque esta 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 no msdb.sys.routes. Essa rota é a única rota no conjunto de rotas correspondentes, e o Service Broker escolhe essa rota. Se o serviço para a mensagem não existir na instância local, a mensagem será descartada.
Exemplo 3: Rota de rede para um banco de dados espelhado
Este exemplo descreve a configuração de roteamento típica para um serviço hospedado por um banco de dados espelhado 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 alvo de OrderParts, o conjunto de rotas correspondentes contém OrderPartsRoute, porque esta 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 espelho para determinar qual parceiro é o principal e, em seguida, 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 no msdb.sys.routes. Essa rota é a única rota no conjunto de rotas correspondentes, e o Service Broker escolhe essa rota. Se o serviço para a 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 para uma instância diferente em AdventureWorks2008R2, a menos que o serviço exista na instância local. As mensagens para quaisquer serviços que não estejam na instância local vão para o mesmo endereço de rede. Essa configuração pode 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 no AdventureWorks2008R2, o conjunto de rotas correspondentes contém tanto AutoCreatedLocal como ExternalRoute, porque o nome do serviço remoto e a instância do agente são os mesmos para ambas as rotas. O Service Broker deve escolher entre essas duas rotas. O Service Broker escolhe rotas com o endereço 'LOCAL' antes de rotas que especificam um endereço de rede, portanto, o Service Broker escolhe primeiro .AutoCreatedLocal Se o serviço de destino existir na instância local, o Service Broker usará essa rota e entregará a mensagem a esse 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 no msdb.sys.routes. Essa rota é a única rota no conjunto de rotas correspondentes, e o Service Broker escolhe essa rota. Se o serviço para a mensagem não existir na instância local, a mensagem será descartada.
Exemplo 5: Rota de rede para diferentes instâncias de um serviço
Este exemplo mostra uma configuração de roteamento em que 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 conversas criadas no banco de dados AdventureWorks2008R2 para o serviço BalancedService que não especificam um identificador do Service Broker, o conjunto de rotas correspondentes contém BalancedRouteOne ou 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 encaminhadas para TCP://server1.Adventure-Works.com:4022/, e outras conversas para TCP://server2.Adventure-Works.com:4022/. No entanto, quando o Service Broker recebe uma confirmação de uma mensagem em uma conversa, o Service Broker usa o identificador do Service Broker contido na confirmação para outras mensagens na conversa. Assim que a primeira confirmação for recebida, todas as mensagens futuras da conversa serão roteadas usando o identificador do 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 direciona-se para o endereço na rota associada a esse identificador do Service Broker.
Para conversas criadas em AdventureWorks2008R2 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 no msdb.sys.routes. Essa rota é a única rota no conjunto de rotas correspondentes, e o Service Broker escolhe essa rota. Se o serviço para a mensagem não existir na instância local, a mensagem será descartada.
Exemplo 6: Reencaminhamento 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 a 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 no AdventureWorks2008R2, AutoCreatedLocal é a única rota no AdventureWorks2008R2.sys.routes. Essa rota é a única rota no conjunto de rotas correspondentes, e 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 no AdventureWorks2008R2 serviço ElsewhereService não é encaminhada 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 desativado, o Service Broker descartará a mensagem.
Para conversas que chegam de fora da instância para todos os outros serviços, AutoCreatedLocal é a única rota correspondente no msdb.sys.routes. O Service Broker escolhe essa rota. Se o serviço para a mensagem não existir na instância local, a mensagem será descartada.
Exemplo 7: Reencaminhamento de mensagens para todos os serviços que não estão na instância
Este 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 no AdventureWorks2008R2, AutoCreatedLocal é a única rota no AdventureWorks2008R2.sys.routes. Essa rota é a única rota no conjunto de rotas correspondentes, e 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 comunicações que chegam de fora do banco de dados, o conjunto de rotas correspondentes contém tanto AutoCreatedLocal quanto ForwardingRoute, porque ambas as rotas especificam o mesmo nome de serviço remoto e identificador do Service Broker. O Service Broker deve escolher entre essas duas rotas. O Service Broker escolhe rotas com o endereço 'LOCAL' antes de rotas que especificam um endereço de rede, portanto, o Service Broker escolhe primeiro .AutoCreatedLocal Se o serviço de destino existir na instância local, o Service Broker usará essa rota e entregará a mensagem a esse 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 descartará a mensagem se o serviço de destino não existir na instância local.