Condividi tramite


Esempi di routing di Service Broker

In questa sezione vengono forniti alcuni esempi del processo di routing di Service Broker. Ogni esempio include tabelle di routing di esempio per AdventureWorks e msdb e descrive l'utilizzo di queste tabelle da parte Service Broker per la scelta di una route per il messaggio.

Le tabelle di routing presentate in questo argomento sono versioni semplificate della vista del catalogo sys.routes. L'ID della route e il proprietario non sono rilevanti per il processo di routing e per tutte le route si presume una durata indefinita.

Il valore NULL nella colonna remote_service_name corrisponde a qualsiasi nome di servizio. Il valore NULL nella colonna broker_instance corrisponde a qualsiasi identificatore di Service Broker.

Gli esempi relativi ai messaggi in uscita non utilizzano la tabella di routing in msdb e gli esempi relativi ai messaggi in arrivo e all'inoltro di messaggi non utilizzano la tabella di routing per AdventureWorks.

Esempio 1: Configurazione predefinita

In questo esempio viene illustrata la configurazione predefinita per il routing di Service Broker. Per impostazione predefinita, tutti i database ad eccezione di master contengono la route AutoCreatedLocal. Pertanto, le tabelle di routing per AdventureWorks e msdb contengono le informazioni seguenti.

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

In questo caso, tutti i dialoghi creati nel database AdventureWorks vengono recapitati a un servizio nell'istanza corrente. Inoltre, tutti i dialoghi provenienti dall'esterno dell'istanza vengono recapitati a un servizio nell'istanza corrente.

Per le conversazioni create in AdventureWorks, AutoCreatedLocal è l'unica route in AdventureWorks.sys.routes. Si tratta dell'unica route nel set delle route corrispondenti e pertanto viene scelta da Service Broker. Se il servizio per il messaggio non esiste nell'istanza locale, il messaggio viene eliminato.

Il processo è lo stesso per le conversazioni provenienti dall'esterno dell'istanza. Per le conversazioni provenienti dall'esterno dell'istanza, AutoCreatedLocal è l'unica route in msdb.sys.routes. Si tratta dell'unica route nel set delle route corrispondenti e pertanto viene scelta da Service Broker. Se il servizio per il messaggio non esiste nell'istanza locale, il messaggio viene eliminato.

Esempio 2: Route di rete per un servizio specifico

In questo esempio viene illustrata la tipica configurazione di routing per i servizi all'esterno dell'istanza corrente. Per configurare una route a un servizio esterno, creare la route nel database che avvia la conversazione. In questo esempio, AdventureWorks contiene una route per il servizio OrderParts. La route contiene un indirizzo di rete per il servizio 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

In questo caso, tutti i dialoghi creati nel database AdventureWorks per il servizio OrderParts corrispondono alla route OrderPartsRoute. Service Broker invia questi messaggi all'indirizzo di rete tcp://host2.Adventure-Works.com:4022/. Tutte le altre conversazioni vengono recapitate ai servizi nella stessa istanza.

Per le conversazioni create in AdventureWorks con un servizio di destinazione di OrderParts, il set di route corrispondenti contiene OrderPartsRoute, dato che la route corrisponde esattamente al nome del servizio. OrderPartsRoute è l'unica route nel set delle route corrispondenti e pertanto viene scelta da Service Broker.

Per le conversazioni create in AdventureWorks per un servizio di destinazione diverso, il set di route corrispondenti contiene AutoCreatedLocal. Si tratta dell'unica route nel set delle route corrispondenti e pertanto viene scelta da Service Broker. Se il servizio per il messaggio non esiste nell'istanza locale, Service Broker contrassegna la conversazione come posticipata.

Per le conversazioni provenienti dall'esterno dell'istanza, AutoCreatedLocal è l'unica route in msdb.sys.routes. Si tratta dell'unica route nel set delle route corrispondenti e pertanto viene scelta da Service Broker. Se il servizio per il messaggio non esiste nell'istanza locale, il messaggio viene eliminato.

Esempio 3: Route di rete per un database con mirroring

In questo esempio viene illustrata la tipica configurazione di routing per un servizio ospitato da un database con mirroring all'esterno dell'istanza corrente. Per configurare una route a un servizio esterno, creare la route nel database che avvia la conversazione. In questo esempio, AdventureWorks contiene una route per il servizio OrderParts. La route contiene sia un indirizzo di rete che un indirizzo del server mirror per il servizio 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

Per le conversazioni create in AdventureWorks con un servizio di destinazione di OrderParts, il set di route corrispondenti contiene OrderPartsRoute, dato che la route corrisponde esattamente al nome del servizio. OrderPartsRoute è l'unica route nel set delle route corrispondenti e pertanto viene scelta da Service Broker. Service Broker verifica l'indirizzo e l'indirizzo del server mirror per determinare il partner che rappresenta l'entità, quindi invia il messaggio all'entità.

Per le conversazioni create in AdventureWorks per un servizio di destinazione diverso, il set di route corrispondenti contiene AutoCreatedLocal. Si tratta dell'unica route nel set delle route corrispondenti e pertanto viene scelta da Service Broker. Se il servizio per il messaggio non esiste nell'istanza locale, Service Broker contrassegna la conversazione come posticipata.

Per le conversazioni provenienti dall'esterno dell'istanza, AutoCreatedLocal è l'unica route in msdb.sys.routes. Si tratta dell'unica route nel set delle route corrispondenti e pertanto viene scelta da Service Broker. Se il servizio per il messaggio non esiste nell'istanza locale, il messaggio viene eliminato.

Esempio 4: Route di rete per tutti i servizi esterni

Questo esempio prevede l'invio di messaggi da servizi in AdventureWorks a un'altra istanza se il servizio non esiste nell'istanza locale. Si noti che i messaggi destinati ai servizi esterni all'istanza locale vengono inviati allo stesso indirizzo di rete. Questa configurazione può essere utile se l'istanza di SQL Server all'indirizzo di rete specificato esegue l'inoltro dei messaggi.

In questo esempio, il database AdventureWorks contiene la route AutoCreatedLocal e la route per l'indirizzo 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

Per le conversazioni create in AdventureWorks, il set di route corrispondenti contiene sia AutoCreatedLocal che ExternalRoute poiché il nome del servizio remoto e l'istanza di Service Broker sono gli stessi per entrambe le route. Service Broker deve scegliere tra queste due route. Service Broker sceglie la route con l'indirizzo 'LOCAL' piuttosto che le route che specificano un indirizzo di rete. In questo caso, la prima scelta è quindi AutoCreatedLocal. Se il servizio di destinazione esiste nell'istanza locale, Service Broker utilizza questa route per recapitare il messaggio al servizio. Se invece il servizio di destinazione non esiste nell'istanza locale, Service Broker sceglie ExternalRoute.

Per le conversazioni provenienti dall'esterno dell'istanza, AutoCreatedLocal è l'unica route in msdb.sys.routes. Si tratta dell'unica route nel set delle route corrispondenti e pertanto viene scelta da Service Broker. Se il servizio per il messaggio non esiste nell'istanza locale, il messaggio viene eliminato.

Esempio 5: Route di rete per istanze diverse di un servizio

In questo esempio viene illustrata una configurazione di routing in cui due indirizzi di rete diversi ospitano istanze distinte dello stesso servizio. Questa configurazione può essere utile per la funzionalità di bilanciamento del carico.

In questo esempio, il database AdventureWorks contiene la route AutoCreatedLocal e le route per il servizio 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

Per le conversazioni create nel database AdventureWorks per il servizio BalancedService che non specificano un identificatore di Service Broker, il set di route corrispondenti contiene BalancedRouteOne e BalancedRouteTwo. Dato che le route contengono identificatori di Service Broker diversi, viene selezionato arbitrariamente un identificatore di Service Broker e viene utilizzata la route corrispondente. Poiché solo una route corrisponde, Service Broker sceglie tale route per la conversazione. Di conseguenza, viene eseguito il routing di alcune conversazioni a tcp://server1.Adventure-Works.com:4022/ e di altre a tcp://server2.Adventure-Works.com:4022/. Tuttavia, una volta ricevuto un acknowledgement per un messaggio di una conversazione, Service Broker utilizza l'identificatore di Service Broker contenuto nell'acknowledgement per altri messaggi della conversazione. Dopo la ricezione del primo acknowledgement, per il routing di tutti i successivi messaggi della conversazione viene utilizzato l'identificatore di Service Broker nell'acknowledgement.

Per le conversazioni create nel database AdventureWorks per il servizio BalancedService che specificano un identificatore di Service Broker nella tabella di routing, il set di route corrispondenti contiene la route corrispondente all'identificatore di Service Broker. Per la conversazione viene eseguito il routing all'indirizzo presente nella route con tale identificatore di Service Broker.

Per le conversazioni create in AdventureWorks per un servizio di destinazione diverso, il set di route corrispondenti contiene solo AutoCreatedLocal. Service Broker quindi sceglie questa route. Se il servizio per il messaggio non esiste nell'istanza locale, Service Broker contrassegna la conversazione come posticipata.

Per le conversazioni provenienti dall'esterno dell'istanza, AutoCreatedLocal è l'unica route in msdb.sys.routes. Si tratta dell'unica route nel set delle route corrispondenti e pertanto viene scelta da Service Broker. Se il servizio per il messaggio non esiste nell'istanza locale, il messaggio viene eliminato.

Esempio 6: Inoltro dei messaggi per un servizio specifico

In questo esempio i messaggi dall'esterno dell'istanza locale vengono inoltrati al servizio ElsewhereService all'indirizzo di rete tcp://elsewhere.Adventure-Works.com:4022/. Per tutti gli altri servizi, Service Broker recapita i messaggi a un servizio nell'istanza locale oppure contrassegna la conversazione come posticipata se il servizio non esiste nell'istanza locale.

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

Per le conversazioni create in AdventureWorks, AutoCreatedLocal è l'unica route in AdventureWorks.sys.routes. Si tratta dell'unica route nel set delle route corrispondenti e pertanto viene scelta da Service Broker. Se il servizio per il messaggio non esiste nell'istanza locale, Service Broker contrassegna la conversazione come posticipata. Si noti che per una conversazione creata in AdventureWorks per il servizio ElsewhereService non viene eseguito il routing a tcp://elsewhere.Adventure-Works.com:4022/.

Per le conversazioni provenienti dall'esterno dell'istanza per il servizio ElsewhereService, la route ForwardingRoute corrisponde esattamente al nome del servizio. Pertanto, ForwardingRoute è l'unica route nel set di route corrispondenti e pertanto viene scelta da Service Broker quando l'inoltro dei messaggi è attivo. Service Broker sceglie questa route anche se l'istanza locale contiene il servizio ElsewhereService. Se l'inoltro dei messaggi non è attivo, il messaggio viene eliminato.

Per le conversazioni provenienti dall'esterno dell'istanza per tutti gli altri servizi, AutoCreatedLocal è l'unica route corrispondente in msdb.sys.routes. Service Broker quindi sceglie questa route. Se il servizio per il messaggio non esiste nell'istanza locale, il messaggio viene eliminato.

Esempio 7: Inoltro dei messaggi per tutti i servizi all'esterno dell'istanza

In questo esempio i messaggi vengono inviati dall'esterno dell'istanza locale a un'istanza diversa se il servizio non esiste nell'istanza locale. Si noti che i messaggi per tutti i servizi esterni vengono inviati allo stesso indirizzo di rete. Questa configurazione può essere utile per l'inoltro di messaggi.

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

Per le conversazioni create in AdventureWorks, AutoCreatedLocal è l'unica route in AdventureWorks.sys.routes. Si tratta dell'unica route nel set delle route corrispondenti e pertanto viene scelta da Service Broker. Se il servizio per il messaggio non esiste nell'istanza locale, Service Broker contrassegna la conversazione come posticipata.

Per le conversazioni provenienti dall'esterno del database, il set di route corrispondenti contiene sia AutoCreatedLocal che ForwardingRoute poiché in entrambe le route è specificato lo stesso nome di servizio remoto e lo stesso identificatore di Service Broker. Service Broker deve scegliere tra queste due route. Service Broker sceglie la route con l'indirizzo 'LOCAL' piuttosto che le route che specificano un indirizzo di rete. In questo caso, la prima scelta è quindi AutoCreatedLocal. Se il servizio di destinazione esiste nell'istanza locale, Service Broker utilizza questa route per recapitare il messaggio al servizio. Se invece il servizio di destinazione non esiste nell'istanza locale ed è attivo l'inoltro dei messaggi, Service Broker sceglie ForwardingRoute. Se l'inoltro dei messaggi non è attivo e il servizio di destinazione non esiste nell'istanza locale, il messaggio viene eliminato.