Messages Service Broker
La plupart des communications qui existent entre des applications sont gérées par le biais de messages qui leur sont spécifiques ; ceux-ci sont définis comme des objets de type message. Par ailleurs, Service Broker fournit trois types de message qui contiennent des informations propres à son utilisation plutôt que des données spécifiques aux applications. Chaque application doit suivre une logique de gestion des messages d'erreur (Error) et de fin de dialogue (End Dialog). Si l'application définit un minuteur de conversation sur une conversation de dialogue, elle doit contenir la logique nécessaire pour gérer les messages du minuteur de dialogue (Dialog Timer). Service Broker fournit ces types de messages pour chaque service, qu'ils soient présents ou non dans le contrat du service.
Messages du minuteur de dialogue (Dialog Timer)
Les messages du minuteur de dialogue signalent la fin du décompte du minuteur de conversation pour un dialogue. These messages are of message type https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer. Un minuteur de conversation est spécifique à un participant de la conversation ; Service Broker n'envoie jamais les messages d'un minuteur de dialogue à l'autre participant de la conversation.
Ces messages sont vides. Une opération de réception reçoit le message du minuteur de dialogue avant tout autre message pour ce dialogue, peu importe l'ordre d'arrivée dans la file d'attente du message notifiant l'expiration du délai.
Messages d'erreur
Lorsqu'un service distant met fin à un dialogue par le biais d'une erreur ou que le broker local détecte une erreur irrécupérable dans un dialogue, un message d'erreur est créé par ce broker. Ces messages d'erreur sont du type https://schemas.microsoft.com/SQL/ServiceBroker/Error, ils sont validés en tant que contenu XML bien formé.
Le document XML contenu dans un message d'erreur utilise l'espace de noms https://schemas.microsoft.com/SQL/ServiceBroker. L'élément racine du document porte le nom local Error et englobe deux éléments : Code et Message. L'élément Code présente une valeur d'entier, tandis que l'élément Message affiche un texte du message compréhensible pour le lecteur.
Par exemple, un message d'erreur créé automatiquement par un service traitant les notes de frais peut afficher le contenu XML suivant (remis en forme pour plus de lisibilité) :
<?xml version="1.0"?>
<Error xmlns="https://schemas.microsoft.com/SQL/ServiceBroker">
<Code>12</Code>
<Description>
Unknown cost center "127-1000". Please check the cost center list
and resubmit the report.
</Description>
</Error>
Une opération de réception reçoit un message d'erreur avant tout autre message pour ce dialogue, à moins qu'il ne s'agisse d'un message du minuteur de dialogue ; l'ordre d'arrivée du message d'erreur dans la file d'attente n'est pas pris en compte. Lorsqu'une file d'attente contient à la fois un message du minuteur de dialogue et un message d'erreur, l'opération de réception récupère en priorité le message du minuteur de dialogue.
Une fois qu'un message d'erreur est arrivé pour un dialogue, le broker déclenche une erreur si une application essaie d'envoyer un message dans ce dialogue. Néanmoins, une application peut recevoir tous les messages destinés à ce dialogue s'il en reste, même après avoir reçu un message d'erreur.
Messages de fin de dialogue (End Dialog)
Lorsqu'une application met un terme à un dialogue sans spécifier d'erreur, le broker local envoie un message de fin de dialogue (End Dialog) au broker distant. Ces messages sont du type https://schemas.microsoft.com/SQL/ServiceBroker/EndDialog.
Les messages de fin de dialogue sont des messages vides. Une opération de réception reçoit un message de ce type dans l'ordre suivant lequel il est arrivé dans la file d'attente.
Voir aussi
Tâches
Procédure : récupérer des informations à partir d'un message d'erreur Service Broker (Transact SQL)