Création d'applications Service Broker

Cette section fournit une vue d'ensemble de la structure d'une application Service Broker, présente certaines des stratégies les plus courantes employées pour le démarrage d'une application qui utilise Service Broker et décrit les étapes élémentaires à suivre pour la réception et le traitement des messages.

L'application pour un service initiateur utilise l'instruction BEGIN DIALOG afin de spécifier des informations sur les services au niveau de chaque point de terminaison et sur le contrat de service que l'application utilisera pour communiquer. L'application utilise l'instruction SEND pour envoyer le premier message de la conversation au service cible. L'application doit être prête à recevoir des messages de Service Broker et à les traiter, même si le contrat n'autorise pas le service cible à retourner des messages. L'application à l'origine de la conversation est souvent implémentée sous la forme de deux composants distincts. Un composant entame la conversation ; l'autre composant traite les messages qui arrivent dans la file d'attente.

L'application pour un service cible reçoit et traite les messages émanant du service initiateur. L'application doit également être prête à recevoir des messages de Service Broker et à les traiter.

Selon les besoins du service, différentes méthodes sont disponibles pour démarrer la partie de l'application qui traite la file d'attente. Pour plus d'informations sur le démarrage d'une application qui utilise Service Broker, consultez Choix d'une stratégie de démarrage.

Quelle que soit la méthode de démarrage employée, l'application initie une transaction et utilise l'instruction RECEIVE pour retirer un message de la file d'attente. L'application extrait les données des messages et procède au traitement nécessaire. Le cas échéant, l'application utilise l'instruction SEND pour envoyer les messages à l'autre partie de la conversation. L'application valide ensuite la transaction. Pour garantir une meilleure efficacité, l'application peut traiter plusieurs messages dans la même transaction. Les services qui gèrent l'état utilisent souvent l'instruction GET CONVERSATION GROUP pour verrouiller un groupe de conversations, extraire l'état du groupe de conversations, puis traiter plusieurs messages du groupe de conversations.

La conversation se poursuit, par le biais des instructions SEND et RECEIVE qui permettent de transmettre les messages entre les points de terminaison. Si besoin est, chaque participant engagé dans la conversation peut à tout moment utiliser l'instruction BEGIN DIALOG pour entamer une conversation avec un autre service afin d'obtenir des informations supplémentaires. Par exemple, une application qui traite une notification d'événement peut entamer une autre conversation avec un service qui fournit des informations sur les employés afin d'extraire les informations de contact actuelles avant d'envoyer une alerte.

Lorsque les objectifs de la conversation ont été atteints, l'application au point de terminaison approprié utilise une instruction END CONVERSATION pour mettre fin à la conversation. L'autre participant reçoit le message END CONVERSATION et émet également un message END CONVERSATION sur sa partie de la conversation. Une fois que les deux participants ont émis les messages END CONVERSATION, la conversation prend fin.

Si une erreur se produit, un participant à la conversation peut indiquer un échec en mettant fin à la conversation par le biais de la clause WITH ERROR. La clause WITH ERROR met fin à la conversation et envoie un message d'erreur Service Broker à l'autre participant.

Si Service Broker détecte une erreur ou si la durée de vie de la conversation arrive à échéance, Service Broker met fin à la conversation et retourne un message d'erreur aux participants actifs. Si Service Broker ne peut pas établir de conversation, le seul participant actif est l'application à l'origine de la conversation, et l'erreur est remise au service à l'origine de la conversation. Si un participant a déjà mis fin à la conversation, le message d'erreur est remis à l'autre participant. Dans le cas contraire, le message d'erreur est remis aux deux participants à la conversation.

Dans cette section