Création d'applications à l'aide de Service Broker

Tout programme exécutant des instructions Transact-SQL peut utiliser Service Broker. Une application Service Broker peut être implémentée comme programme s'exécutant à l'extérieur de SQL Server ou comme procédure stockée écrite en Transact-SQL ou dans un langage .NET.

Un programme qui utilise Service Broker est généralement constitué d'un certain nombre de composants fonctionnant conjointement pour accomplir une tâche. Un programme qui engage une conversation crée et envoie un message à un autre service. Ce programme peut attendre une réponse ou se fermer immédiatement pour laisser un autre programme traiter la réponse. Lorsqu'un service devient la cible d'une conversation, le programme reçoit un message entrant de la file d'attente du service, lit les données du message, effectue le traitement nécessaire, crée et envoie au besoin un message de réponse.

Service Broker étend Transact-SQL. Une application ne requiert ni modèle ni bibliothèque d'objets particuliers pour travailler avec Service Broker. De fait, les programmes envoient des commandes Transact-SQL à SQL Server, pour ensuite traiter les résultats de ces commandes. Une application peut être activée par Service Broker, elle peut s'exécuter en tant que service d'arrière-plan ou travail planifié et être lancée en réponse à un événement. Pour plus d'informations sur les stratégies de démarrage d'une application qui utilise Service Broker, consultez Choix d'une stratégie de démarrage.

Pour plus d'informations sur la création d'applications à l'aide de Service Broker, consultez Avantages de la programmation avec Service Broker.

Vue d'ensemble d'une application Service Broker

L'illustration suivante indique les interactions existant dans une application qui utilise Service Broker :

Relation et flux de messages dans des conversations

Comme détaillé dans cette illustration, les types de messages SubmitExpense, AcceptDenyExpense et ReimbursementIssued sont créés en premier. Le contrat ProcessExpenses est établi en fonction de ces types de messages, il fournit un schéma permettant de tenir une conversation pour accomplir une tâche de remboursement de frais. Le contrat ProcessExpenses régit toutes les conversations entre le service ProcessExpense et le service SubmitExpense. Le contrat ProcessExpenses et les types de messages qu'il utilise doivent exister dans les bases de données de tous les services qui tiennent des conversations basées sur ce contrat.

Service Broker stocke les messages envoyés au service SubmitExpense dans la file d'attente de ce service. La procédure stockée ExpenseSubmission traite les messages qu'elle reçoit de cette file d'attente et envoie des messages à un autre service si une réponse est nécessaire.

Service Broker stocke les messages envoyés au service ProcessExpense dans la file d'attente de ce service. La procédure stockée ExpenseProcessing traite les messages qu'elle reçoit de cette file d'attente et envoie des messages à un autre service si une réponse est nécessaire.

Une conversation entre ces deux services peut être structurée de la façon suivante :

  • Un utilisateur soumet une demande de remboursement de frais via une interface utilisateur. L'application exécute la procédure stockée ExpenseSubmission qui crée un message SubmitExpense. Le service SubmitExpense engage une conversation avec le service ProcessExpense, puis envoie le message SubmitExpense au service ProcessExpense.

  • Service Broker reçoit le message SubmitExpense pour le service ProcessExpense et place le message dans la file d'attente ExpenseQueue. La file d'attente ExpenseQueue active la procédure stockée ProcessExpense qui retire le message SubmitExpense de la file d'attente pour le traiter. La procédure stockée ProcessExpense crée ensuite un message AcceptDenyExpense qu'elle envoie au service SubmitExpense. Si le remboursement des frais est refusé, la procédure stockée ProcessExpense met fin à la conversation.

  • Service Broker place le message AcceptDenyExpense pour le service SubmitExpense dans la file d'attente de ce service. Si la procédure ProcessExpense a mis un terme à la conversation, Service Broker place un message EndDialog dans la file d'attente Expenses. La file d'attente active la procédure stockée ExpenseSubmission qui retire le message AcceptDenyExpense de la file d'attente pour le traiter. Si la procédure stockée ExpenseSubmission trouve un message EndDialog dans la file d'attente, elle met fin à la conversation.

  • Si le remboursement des frais est accepté, le service ProcessExpense crée un message ReimbursementIssued qu'il envoie pour confirmer le déclenchement du paiement, puis il met fin à la conversation. Service Broker place ces messages dans la file d'attente du service. La file d'attente active la procédure stockée ExpenseSubmission qui traite le message ReimbursementIssued. Cette procédure traite ensuite le message EndDialog et met fin à la conversation.