Création d'objets Service Broker

Une application utilise Service Broker en exécutant des instructions Transact-SQL qui s'appliquent aux objets Service Broker définis dans une base de données. Cette section décrit les éléments à prendre en compte lorsque vous créez les objets Service Broker d'une application.

Vue d'ensemble

Les objets Service Broker définissent les métadonnées et le stockage pour un ensemble de tâches spécifique :

  • Les types de messages définissent les données qui sont échangées dans une conversation.

  • Les contrats définissent les tâches. Chaque contrat spécifie les types de messages pouvant être utilisés dans une conversation, ainsi que le côté de la conversation qui peut envoyer le message.

  • Une file d'attente stocke les messages entrants d'un service.

  • Un service représente un ensemble de tâches professionnelles associé. Le nom du service est également utilisé pour identifier la file d'attente du service.

Notez qu'un contrat dépend d'un ou de plusieurs types de messages. Un service dépend d'une file d'attente et peut dépendre d'un ou de plusieurs contrats. Par conséquent, les contrats sont créés après les types de messages et sont supprimés avant les types de messages. Les services sont créés après les files d'attente et les contrats, et ils sont supprimés avant les files d'attente et les contrats.

Création d'objets pour un service

Pour la création d'un service, la procédure de base est toujours la même, que votre service soit un service initiateur, un service cible ou les deux à la fois.

La définition d'un service spécifie les contrats pour lesquels le service peut constituer une cible. Par opposition, une application peut utiliser un service pour lancer une conversation qui utilise un contrat défini dans la base de données. Service Broker adopte cette approche pour faire en sorte qu'un service reçoive uniquement les messages que l'application peut traiter (il s'agit là d'un principe de base). Pour s'assurer que l'application ne reçoit pas de messages d'un type arbitraire ou inconnu, Service Broker accepte un nouveau dialogue uniquement si ce dernier respecte un contrat spécifié dans le service. Un service initiateur spécifie le contrat à utiliser lorsque la conversation s'engage ; il n'a donc pas besoin d'inclure le contrat dans la définition du service.

Pour créer les objets d'un service, procédez comme suit :

  1. Créez des types de messages qui définissent les messages que votre service utilisera pour effectuer les tâches de communication requises. Vous pouvez soit définir ces types vous-même, soit vous procurer des scripts pour créer les types auprès du créateur du service avec lequel votre service communiquera. Vous pouvez ignorer cette étape lorsque la base de données contient déjà les types de messages dont votre service a besoin.

  2. Créez un ou plusieurs contrats qui définissent la structure des conversations auxquelles ce service peut participer. Vous pouvez soit définir ce contrat vous-même, soit vous procurer des scripts pour créer le contrat auprès du créateur du service avec lequel votre service communiquera. Vous pouvez ignorer cette étape lorsque la base de données contient déjà les contrats dont votre service a besoin.

  3. Créez une file d'attente. Service Broker utilise cette file d'attente pour recevoir et stocker les messages entrants du service. Pour plus d'informations sur la création de files d'attente, consultez CREATE QUEUE. Chaque service doit disposer d'une file d'attente. Pour simplifier la programmation et l'administration, chaque service utilise généralement une file d'attente qui lui est dédiée. Si votre service doit utiliser la rétention des messages, spécifiez le paramètre de rétention des messages pour la file d'attente.

  4. Créez un service. La définition du service spécifie la file d'attente que le service utilise, ainsi que les contrats pour lesquels ce service constitue la cible.

Dans la plupart des cas, vous créez le service cible, puis vous utilisez les contrats et les types de messages créés pour le service cible afin de créer un service initiateur. Toutefois, dans certains cas, vous pouvez créer un service cible pour un service initiateur qui est déjà défini. Dans ces cas de figure, le service cible utilise les types de messages et les contrats que le service initiateur utilise. Par exemple, si vous créez un service cible pour recevoir des notifications d'événements, vous utilisez le contrat https://schemas.microsoft.com/SQL/Notifications/PostEventNotification, car il s'agit du contrat que le service initiateur utilise.

Gestion des définitions d'objets

Il est recommandé de créer un script Transact-SQL pour les objets Service Broker que votre application utilise. Avec ce script Transact-SQL, vous pouvez aisément faire référence aux caractéristiques de vos objets Service Broker. Le script vous offre également la possibilité de déployer le service sur un autre système ou de recréer le service si besoin est.

Si votre application implique l'envoi de messages entre des instances de SQL Server, il est recommandé de créer un premier script qui définit les types de messages et les contrats du service, puis un deuxième script qui définit la file d'attente et le service. Le premier script définit l'interface du service, les objets qui sont communs au service initiateur et au service cible. Le deuxième script définit le nom du service et la file d'attente, les objets d'un côté de la conversation.

Dans cette section