Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à :SQL Server
Azure SQL Managed Instance
Cette section illustre le processus de routage Service Broker. Chaque exemple contient des exemples de tables de routage pour AdventureWorks2008R2 et msdbdécrit comment Service Broker utilise ces tables de routage pour choisir un itinéraire pour le message.
Remarque
Les exemples de code de cet article ont été testés à l’aide de l’exemple de base de données AdventureWorks2025, que vous pouvez télécharger à partir de la Microsoft SQL Server Samples and Community Projects page d’accueil.
Les tables de routage présentées dans cette rubrique sont des versions simplifiées de l’affichage sys.routes catalogue. L’ID d’itinéraire et le propriétaire ne sont pas importants pour le processus de routage, et tous les itinéraires sont considérés comme ayant une durée de vie indéfinie.
Une valeur de NULL dans la colonne remote_service_name correspond à n’importe quel nom de service. Une valeur de NULL dans la colonne broker_instance correspond à n’importe quel identificateur de Service Broker.
Les exemples de messages sortants n’utilisent pas la table de routage dans msdb, et les exemples 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 sauf master contiennent l’itinéraire AutoCreatedLocal . Par conséquent, les tables de routage pour AdventureWorks2008R2 et msdb contiennent les informations suivantes.
| Colonne | AdventureWorks2008R2 | msdb |
|---|---|---|
name |
AutoCreatedLocal |
AutoCreatedLocal |
remote_service_name |
NULL |
NULL |
broker_instance |
NULL |
NULL |
address |
LOCAL |
LOCAL |
mirror_address |
NULL |
NULL |
Dans ce cas, toutes les boîtes de dialogue créées dans la AdventureWorks2008R2 base de données sont remises à un service dans l’instance actuelle. 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 est la seule route 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 du 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. Pour les conversations qui arrivent de l’extérieur de l’instance, AutoCreatedLocal est la seule route dans msdb.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 du 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 OrderParts service.
| Colonne | 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 |
Dans ce cas, toutes les boîtes de dialogue créées dans la AdventureWorks2008R2 base de données au service OrderParts correspondent à l’itinéraire OrderPartsRoute. Service Broker envoie ces messages à l’adresse TCP://host2.Adventure-Works.com:4022/réseau. Toutes les autres conversations sont remises aux services dans la même instance.
Pour les conversations créées dans AdventureWorks2008R2 avec un service cible OrderParts, l’ensemble des itinéraires correspondants contient OrderPartsRoute, car cet itinéraire correspond exactement au nom du service.
OrderPartsRoute est le seul itinéraire dans l’ensemble d’itinéraires correspondants. Service Broker choisit donc cet itinéraire.
Pour les conversations créées depuis AdventureWorks2008R2 vers un autre service cible, l’ensemble d’itinéraires correspondants contient AutoCreatedLocal. Étant donné qu’il s’agit de la seule route dans l’ensemble d’itinéraires correspondants, Service Broker choisit cet itinéraire. Si le service du message n’existe pas dans l’instance locale, Service Broker marque la conversation DELAYED.
Pour les conversations qui arrivent de l’extérieur de l’instance, AutoCreatedLocal est la seule route dans msdb.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 du 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 à la fois une adresse réseau et une adresse miroir pour le OrderParts service.
| Colonne | 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 |
Pour les conversations créées dans AdventureWorks2008R2 avec un service cible OrderParts, l’ensemble des itinéraires correspondants contient OrderPartsRoute, car cet itinéraire correspond exactement au nom du service.
OrderPartsRoute est le seul itinéraire dans l’ensemble d’itinéraires correspondants. Service Broker choisit donc cet itinéraire. 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 depuis AdventureWorks2008R2 vers un autre service cible, l’ensemble d’itinéraires correspondants contient AutoCreatedLocal. Étant donné qu’il s’agit de la seule route dans l’ensemble d’itinéraires correspondants, Service Broker choisit cet itinéraire. Si le service du message n’existe pas dans l’instance locale, Service Broker marque la conversation DELAYED.
Pour les conversations qui arrivent de l’extérieur de l’instance, AutoCreatedLocal est la seule route dans msdb.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 du 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 des services de AdventureWorks2008R2 vers une autre instance, sauf si le service existe dans l’instance locale. Les messages pour les services qui ne se trouvent pas dans l’instance locale passent à la même adresse réseau. Cette configuration peut être utile si l’instance SQL Server à cette adresse réseau effectue le transfert de messages.
Dans cet exemple, la AdventureWorks2008R2 base de données contient l’itinéraire AutoCreatedLocal ainsi qu’une route vers l’adresse TCP://forwarding.Adventure-Works.com:4022/.
| Colonne | 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 |
Pour les conversations créées dans AdventureWorks2008R2, l’ensemble d’itinéraires correspondants contient à la fois AutoCreatedLocal et ExternalRoute, car le nom du service distant et l’instance broker sont identiques pour les deux itinéraires. Service Broker doit choisir entre ces deux itinéraires. Service Broker choisit les itinéraires avec l’adresse 'LOCAL' avant les itinéraires qui spécifient une adresse réseau. Service Broker choisit AutoCreatedLocaldonc d’abord . Si le service cible existe dans l'instance locale, Service Broker utilise cet itinéraire pour remettre le message à ce service. Toutefois, si le service cible n’existe pas dans l’instance locale, Service Broker choisit ExternalRoute.
Pour les conversations qui arrivent de l’extérieur de l’instance, AutoCreatedLocal est la seule route dans msdb.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 du 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 être utile pour une configuration d’équilibrage de charge.
Dans cet exemple, la AdventureWorks2008R2 base de données contient l’itinéraire AutoCreatedLocal ainsi que les itinéraires vers le service BalancedService.
| Colonne | 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 |
Pour les conversations créées dans la base de données AdventureWorks2008R2 vers le service BalancedService qui ne spécifient pas d'identificateur de Service Broker, l'ensemble d'itinéraires correspondants contient soit BalancedRouteOne soit BalancedRouteTwo. Étant donné que les itinéraires contiennent différents identificateurs Service Broker, le processus correspondant sélectionne arbitrairement un identificateur Service Broker et correspond à cet itinéraire. Étant donné qu’un seul itinéraire correspond, Service Broker choisit cet itinéraire pour la conversation. Le résultat est que certaines conversations sont acheminées vers TCP://server1.Adventure-Works.com:4022/, et d’autres conversations 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 AdventureWorks2008R2 base de données vers le service BalancedService qui spécifient l’un des identificateurs Service Broker dans la table de routage, l’ensemble d’itinéraires correspondants contient l’itinéraire qui correspond à 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 vers un autre service cible, l’ensemble d’itinéraires correspondants contient uniquement AutoCreatedLocal. Service Broker choisit cet itinéraire. Si le service du message n’existe pas dans l’instance locale, Service Broker marque la conversation DELAYED.
Pour les conversations qui arrivent de l’extérieur de l’instance, AutoCreatedLocal est la seule route dans msdb.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 du message n’existe pas dans l’instance locale, le message est supprimé.
Exemple 6 : Transfert de messages pour un service spécifique
Cet exemple transfère les messages de l’extérieur de l’instance locale au service ElsewhereService vers l’adresse TCP://elsewhere.Adventure-Works.com:4022/réseau. Pour tous les autres services, Service Broker remet les messages à un service dans l’instance locale ou marque la conversation DELAYED si le service n’existe pas dans l’instance locale.
| Colonne | 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 |
Pour les conversations créées dans AdventureWorks2008R2, AutoCreatedLocal est la seule route 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 du message n’existe pas dans l’instance locale, Service Broker marque la conversation DELAYED. Une conversation créée dans AdventureWorks2008R2 le service ElsewhereService n’est pas acheminée vers TCP://elsewhere.Adventure-Works.com:4022/.
Pour les conversations qui arrivent de l’extérieur de l’instance au service ElsewhereService, l’itinéraire ForwardingRoute correspond exactement au nom du service. Par conséquent, ForwardingRoute est le seul itinéraire dans l’ensemble d’itinéraires correspondants, et Service Broker choisit cet itinéraire lorsque le transfert de message 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 qui arrivent de l’extérieur de l’instance à tous les autres services, AutoCreatedLocal est la seule route correspondante dans msdb.sys.routes. Service Broker choisit cet itinéraire. Si le service du message n’existe pas dans l’instance locale, le message est supprimé.
Exemple 7 : Transfert de messages pour tous les services non 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. Les messages pour tous les services externes sont envoyés à la même adresse réseau. Cette configuration peut être utile pour le transfert de messages.
| Colonne | 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 |
Pour les conversations créées dans AdventureWorks2008R2, AutoCreatedLocal est la seule route 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 du message n’existe pas dans l’instance locale, Service Broker marque la conversation DELAYED.
Pour les conversations qui arrivent à partir de l’extérieur de la base de données, l’ensemble d’itinéraires correspondants contient les deux AutoCreatedLocal et ForwardingRoute, car les deux itinéraires spécifient le même nom de service distant et l’identificateur Service Broker. Service Broker doit choisir entre ces deux itinéraires. Service Broker choisit les itinéraires avec l’adresse 'LOCAL' avant les itinéraires qui spécifient une adresse réseau. Service Broker choisit AutoCreatedLocaldonc d’abord . Si le service cible existe dans l'instance locale, Service Broker utilise cet itinéraire pour remettre le message à ce service. Toutefois, si le service cible n’existe pas dans l’instance locale et que le transfert de messages est activé, Service Broker choisit ForwardingRoute. Si le transfert de message n’est pas activé, Service Broker supprime le message si le service cible n’existe pas dans l’instance locale.