Partager via


Exemples de routage Service Broker

Cette section illustre le processus de routage Service Broker. Chaque cas développé, contenant des tables de routage données en exemple pour AdventureWorks2008R2 et msdb, décrit l'utilisation que Service Broker fait de ces tables de routage pour choisir l'itinéraire d'un message.

Les tables de routage présentes dans cette rubrique sont des versions simplifiées de l'affichage catalogue sys.routes. L'identificateur de l'itinéraire et le propriétaire ne sont pas importants pour le processus de routage, tous les itinéraires bénéficient d'une durée de vie illimitée.

La valeur NULL, dans la colonne remote_service_name, correspond à un nom de service quelconque. Dans la colonne broker_instance, cette valeur NULL correspond à n'importe quel identificateur Service Broker.

Les exemples pour les messages sortants n'utilisent pas la table de routage dans msdb et ceux prévus pour les messages entrants et le transfert de messages n'utilisent pas la table de routage pour AdventureWorks2008R2.

Exemple 1 : configuration par défaut

Cet exemple illustre la configuration par défaut pour le routage Service Broker. Par défaut, toutes les bases de données à l'exception de master contiennent l'itinéraire AutoCreatedLocal. Ainsi, les tables de routage pour AdventureWorks2008R2 et msdb contiennent les informations suivantes.

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

Dans ce cas, tous les dialogues créés dans la base de données AdventureWorks2008R2 sont remis à un service dans l'instance active. De plus, tous les dialogues provenant de l'extérieur de l'instance sont remis à un service dans l'instance active.

Pour les conversations créées dans AdventureWorks2008R2, AutoCreatedLocal représente le seul itinéraire dans AdventureWorks2008R2.sys.routes. Il s'agit du seul itinéraire présent dans l'ensemble des itinéraires correspondants et de celui que choisit Service Broker. Si le service pour le message n'existe pas dans l'instance locale, le message est supprimé.

Le processus est identique pour les conversations qui proviennent de l'extérieur de l'instance. AutoCreatedLocal représente le seul itinéraire possible dans msdb.sys.routes pour ce type de conversation. Il s'agit du seul itinéraire présent dans l'ensemble des itinéraires correspondants et de celui que choisit Service Broker. Si le service pour le message n'existe pas dans l'instance locale, le message est supprimé.

Exemple 2 : itinéraire réseau vers un service spécifique

Cet exemple illustre la configuration de routage classique pour les services situés à l'extérieur de l'instance active. Pour configurer un itinéraire vers un service externe, créez l'itinéraire dans la base de données qui engage la conversation. Dans cet exemple, AdventureWorks2008R2 contient un itinéraire pour le service OrderParts. L'itinéraire contient une adresse réseau pour le service 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

Dans ce cas, tous les dialogues créés dans la base de données AdventureWorks2008R2 à destination du service OrderParts correspondent à l'itinéraire OrderPartsRoute. Service Broker envoie ces messages à l'adresse réseau tcp://host2.Adventure-Works.com:4022/. Toutes les autres conversations sont remises aux services dans la même instance.

Pour les conversations créées dans AdventureWorks2008R2 avec un service cible de OrderParts, l'ensemble des itinéraires correspondants contient OrderPartsRoute puisque cet itinéraire concorde parfaitement avec le nom du service. OrderPartsRoute constitue le seul itinéraire présent dans l'ensemble des itinéraires correspondants, c'est donc celui que choisit Service Broker.

Pour les conversations créées dans AdventureWorks2008R2 à destination d'un service cible différent, l'ensemble des itinéraires correspondants englobe AutoCreatedLocal. Service Broker choisit cet itinéraire puisque c'est le seul itinéraire présent dans l'ensemble des itinéraires correspondants. Si le service pour le message n'existe pas dans l'instance locale, Service Broker marque la conversation comme étant retardée (DELAYED).

AutoCreatedLocal représente le seul itinéraire possible dans msdb.sys.routes pour les conversations provenant de l'extérieur de l'instance. Il s'agit du seul itinéraire présent dans l'ensemble des itinéraires correspondants et de celui que choisit Service Broker. Si le service pour le message n'existe pas dans l'instance locale, le message est supprimé.

Exemple 3 : itinéraire réseau vers une base de données mise en miroir

Cet exemple illustre la configuration de routage classique pour un service hébergé par une base de données mise en miroir à l'extérieur de l'instance active. Pour configurer un itinéraire vers un service externe, créez l'itinéraire dans la base de données qui engage la conversation. Dans cet exemple, AdventureWorks2008R2 contient un itinéraire pour le service OrderParts. L'itinéraire contient une adresse réseau et une base de données en miroir pour le service 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

Pour les conversations créées dans AdventureWorks2008R2 avec un service cible de OrderParts, l'ensemble des itinéraires correspondants contient OrderPartsRoute puisque cet itinéraire concorde parfaitement avec le nom du service. OrderPartsRoute est le seul itinéraire présent dans l'ensemble des itinéraires correspondants, c'est donc celui que choisit Service Broker. Service Broker vérifie à la fois l'adresse et l'adresse miroir pour déterminer le serveur partenaire principal et lui envoyer le message.

Pour les conversations créées dans AdventureWorks2008R2 à destination d'un service cible différent, l'ensemble des itinéraires correspondants englobe AutoCreatedLocal. Service Broker choisit cet itinéraire puisque c'est le seul itinéraire présent dans l'ensemble des itinéraires correspondants. Si le service pour le message n'existe pas dans l'instance locale, Service Broker marque la conversation comme étant retardée (DELAYED).

AutoCreatedLocal représente le seul itinéraire possible dans msdb.sys.routes pour les conversations provenant de l'extérieur de l'instance. Il s'agit du seul itinéraire présent dans l'ensemble des itinéraires correspondants et de celui que choisit Service Broker. Si le service pour le message n'existe pas dans l'instance locale, le message est supprimé.

Exemple 4 : itinéraire réseau vers tous les services externes

Cet exemple envoie des messages depuis des services basés dans AdventureWorks2008R2 vers une instance différente, à moins que le service existe dans l'instance locale. Remarquez que les messages pour les services qui ne se trouvent pas dans l'instance locale sont dirigés vers la même adresse réseau. Cette configuration peut se révéler utile si l'instance SQL Server à cette adresse réseau assure le transfert de messages.

Dans cet exemple, la base de données AdventureWorks2008R2 contient l'itinéraire AutoCreatedLocal, ainsi qu'un itinéraire vers l'adresse 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

Pour les conversations créées dans AdventureWorks2008R2, l'ensemble des itinéraires correspondants contient AutoCreatedLocal et ExternalRoute puisque le nom du service distant et l'instance du broker sont les mêmes pour les deux itinéraires. Service Broker doit donc choisir entre ces deux itinéraires. Comme il privilégie les adresses 'LOCAL' par rapport aux itinéraires indiquant une adresse réseau, il opte pour AutoCreatedLocal. Si le service cible existe dans l'instance locale, Service Broker utilise cet itinéraire pour remettre le message à ce service. S'il n'existe pas, il choisit ExternalRoute.

AutoCreatedLocal représente le seul itinéraire possible dans msdb.sys.routes pour les conversations provenant de l'extérieur de l'instance. Il s'agit du seul itinéraire présent dans l'ensemble des itinéraires correspondants et de celui que choisit Service Broker. Si le service pour le message n'existe pas dans l'instance locale, le message est supprimé.

Exemple 5 : itinéraire réseau vers différentes instances d'un service

Cet exemple illustre une configuration de routage dans laquelle deux adresses réseau différentes hébergent des instances différentes du même service. Cette configuration peut se révéler utile pour une configuration d'équilibrage de charge.

Dans cet exemple, la base de données AdventureWorks2008R2 contient l'itinéraire AutoCreatedLocal, ainsi que les itinéraires vers le service 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

Pour les conversations créées dans la base de données AdventureWorks2008R2 à destination du service BalancedService et qui ne spécifient aucun identificateur Service Broker, l'ensemble des itinéraires correspondants contient soit BalancedRouteOne, soit BalancedRouteTwo. Dans la mesure où ces itinéraires contiennent différents identificateurs Service Broker, le processus de concordance sélectionne arbitrairement un identificateur Service Broker qu'il fait correspondre à l'itinéraire. Puisqu'un seul itinéraire concorde, Service Broker le choisit pour la conversation. Au final, certaines conversations sont acheminées vers tcp://server1.Adventure-Works.com:4022/ et d'autres vers tcp://server2.Adventure-Works.com:4022/. Cependant, dès que Service Broker reçoit l'accusé de réception d'un message d'une conversation, il utilise l'identificateur Service Broker contenu dans la notification pour les autres messages de la conversation. Une fois ce premier accusé de réception reçu, tous les messages suivants de cette conversation sont acheminés en intégrant l'identificateur Service Broker à la notification de réception.

Pour les conversations créées dans la base de données AdventureWorks2008R2 à destination du service BalancedService et qui spécifient un des identificateurs Service Broker de la table de routage, l'ensemble des itinéraires correspondants contient l'itinéraire qui concorde avec l'identificateur Service Broker. La conversation est acheminée vers l'adresse contenue dans l'itinéraire doté de cet identificateur Service Broker.

Pour les conversations créées dans AdventureWorks2008R2 à destination d'un service cible différent, l'ensemble des itinéraires correspondants englobe seulement AutoCreatedLocal. Service Broker choisit donc cet itinéraire. Si le service pour le message n'existe pas dans l'instance locale, Service Broker marque la conversation comme étant retardée (DELAYED).

AutoCreatedLocal représente le seul itinéraire possible dans msdb.sys.routes pour les conversations provenant de l'extérieur de l'instance. Il s'agit du seul itinéraire présent dans l'ensemble des itinéraires correspondants et de celui que choisit Service Broker. Si le service pour le message n'existe pas dans l'instance locale, le message est supprimé.

Exemple 6 : transfert de messages pour un service particulier

Cet exemple transfère des messages de l'extérieur d'une instance locale au service ElsewhereService, à l'adresse réseau tcp://elsewhere.Adventure-Works.com:4022/. Pour tous les autres services, Service Broker remet les messages à un service dans l'instance locale ou marque la conversation comme étant retardée (DELAYED), si le service n'existe pas dans l'instance locale.

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

Pour les conversations créées dans AdventureWorks2008R2, AutoCreatedLocal représente le seul itinéraire dans AdventureWorks2008R2.sys.routes. Il s'agit du seul itinéraire présent dans l'ensemble des itinéraires correspondants et de celui que choisit Service Broker. Si le service pour le message n'existe pas dans l'instance locale, Service Broker marque la conversation comme étant retardée (DELAYED). Remarquez qu'une conversation créée dans AdventureWorks2008R2 à destination du service ElsewhereService ne s'achemine pas vers tcp://elsewhere.Adventure-Works.com:4022/.

Pour les conversations provenant de l'extérieur de l'instance à destination du service ElsewhereService, l'itinéraire ForwardingRoute correspond parfaitement au nom du service. ForwardingRoute est le seul itinéraire présent dans l'ensemble des itinéraires correspondants, c'est donc celui que choisit Service Broker lorsque le transfert des messages est activé. Service Broker choisit cet itinéraire même si l'instance locale contient le service ElsewhereService. Si le transfert de messages est désactivé, Service Broker supprime le message.

Pour les conversations provenant de l'extérieur de l'instance à destination de tous les autres services, AutoCreatedLocal représente le seul itinéraire possible dans msdb.sys.routes. Service Broker choisit cet itinéraire. Si le service pour le message n'existe pas dans l'instance locale, le message est supprimé.

Exemple 7 : transfert de messages pour tous les services qui ne sont pas dans l'instance

Cet exemple envoie des messages de l'extérieur de l'instance locale vers une instance différente, à moins que le service existe dans l'instance locale. Remarquez que les messages pour tous les services externes se dirigent vers la même adresse réseau. Cette configuration peut se révéler utile pour le transfert de messages.

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

Pour les conversations créées dans AdventureWorks2008R2, AutoCreatedLocal représente le seul itinéraire dans AdventureWorks2008R2.sys.routes. Il s'agit du seul itinéraire présent dans l'ensemble des itinéraires correspondants et de celui que choisit Service Broker. Si le service pour le message n'existe pas dans l'instance locale, Service Broker marque la conversation comme étant retardée (DELAYED).

Pour les conversations provenant de l'extérieur de la base de données, l'ensemble des itinéraires correspondants contient à la fois AutoCreatedLocal et ForwardingRoute puisque ces deux itinéraires indiquent le même nom de service distant, ainsi que le même identificateur Service Broker. Service Broker doit choisir entre ces deux itinéraires. Comme il privilégie les adresses 'LOCAL' par rapport aux itinéraires indiquant une adresse réseau, il opte pour AutoCreatedLocal. Si le service cible existe dans l'instance locale, Service Broker utilise cet itinéraire pour remettre le message à ce service. Cependant, si le service cible n'existe pas dans l'instance locale et que le transfert de messages est activé, Service Broker choisit ForwardingRoute. En cas de désactivation du transfert de messages, Service Broker supprime le message si le service cible n'existe pas dans l'instance locale.