APSQL

Exemples Service Broker

Exposé le fonctionnement de Service Broker c'est (relativement simple), mais, et c'est bien normal, il faut également se poser la question de : Comment utiliser Service Broker? C'est pourquoi, les exemples présentés, ci dessous doivent vous permettre de mieux comprendre ce qu'il est possible de faire avec service Broker et comment il est possible de la faire.

Cette suite d'exemple, s'appuie sur la structure Service Broker, qui est défini dans mon premier article sur Service Broker, disponible ici.

Etape 1

La première étape consiste à traiter correctement les informations reçus via le message envoyé. Ce message contient des informations au format XML. Il est donc possible en utilisant OPENXML de manipuler correctement les informations au format XML.

Dans l'exemple suivant, les informations reçus via Service Broker sont enregistrées dans une table qui est créée avec le script suivant:

Creation de la table exemple.client

Puis il est nécessaire d'initier le dialogue et d'envoyer le message

Envoi du message

Enfin, le message peut être lu depuis la file d'attente puis traité. Les informations sont alors ajoutées dans la table exemple.client créé pour ce test.

Traiter le message reçu

Exemple 2 : Service Broker entre 2 bases distinctes

Cette fois ci la mise en place est un peu plus complexe. En effet Service Broker doit être capable d'accéder au service distant avec un certain contexte de sécurité.  Pour cela il lui est nécessaire de se connecter au serveur. Il n'est pas possible ni même envisageable de coder en "dur" le mot de passe à utiliser pour se connecter au serveur. C'est pourquoi la connexion utilisée par service Broker sera basé sur un certificat.

Il est également nécessaire de définir une route au niveau Service Broker afin que le service initiateur soit capable de localiser le service route. Ces routes sont tout à fait comparables aux routes qui peuvent être mise en place au niveau du réseau.

La mise en place de ce dialogue entre 2 bases distinctes de la même instance SQL Server est illustrée tout au long des étapes suivantes

Pour mettre en place le dialogue Service Broker entre 2 bases, il est nécessaire de respecter les étapes suivantes:

  1. Créer les objets spécifiques à Service Broker : type de messages, contrat, file d'attente, service
  2. Définition des messages, contrats et service

  3. Définir les routes pour que chaque service puisse localiser le service distant
    1. Rechercher les identifiant service broker
    2. connaitre servicebroker_guid

    3. Mettre en place les routes
    4. création des routes

  4. Définir les éléments nécessaires à sécuriser le transport
  5. (les étapes sont à répéter sur chaque instance)
    1. Créer une Master Key sur la base master
    2. Définir la master key

    3. Créer le certificat et le point de terminaison qui accepte une authentification basé sur les certificats
    4. Définir le certificat et le point de terminaison

    5. Accorder la permission d'utiliser le point de terminaison
    6. Définir la connexion et les droits

  6. Définir les éléments pour sécuriser le dialogue (les étapes sont à répéter sur chaque instance)
    1. Créer une Master Key sur la base locale
    2. Les master key

    3. Créer les certificats
    4. Créer les certificats

    5. Sauvegarder les certificats
    6. Sauvegarder les certificats

    7. Créer les utilisateurs de base de données (sans connexion) et les certificats à partir de la sauvegarde
    8. Créer les utilisateurs et les certificats

    9. Accorder la permission de se connecter à l'utilisateur
    10. Accorder la permission connect

    11. Accorder la permission d'envoyer un message
    12. Accorder la permission d'utiliser le service

    13. Créer un service distant
    14. Créer la liaison de service distant

  7. Envoyer et recevoir des messages
  8. Il ne reste plus, maintenant qu'à tester le fonctionnement de l'architecture Service Broker ainsi mise en place. Ainsi depuis la base bd1 le dialogue est initié.

    Envoyer un message

    Depuis la base de données cible, il est possible de lire est de traiter le message reçu de la façon suivante:

    Lire le message

Mise au point

La mise au point de Service Broker, n'est pas toujours facile, aussi est il possible d'interroger les files d'attentes afin de savoir le message est bien arrivé, ou bien si un message d'erreur est présent. Il est nécessaire d'interroger les files d'attentes relatives aux 2 services car si le service émetteur commet une erreur, un message lui sera envoyé.

Afin de s'assurer que le message est bien parti, il est possible d'interroger la table sys.transmission_queue qui contient les messages en attente d'envoie. La colonne transmission_status contient les informations relatives à l'état de la transmission.

select * from file1;

select * from sys.transmission_queue;

La liste des vues systèmes relatives à Service Broker est:

sys.conversation_endpoints sys.service_contract_usages
sys.conversation_groups sys.service_message_types
sys.remote_service_binding sys.service_queue_usages
sys.routes sys.services
sys.service_contracts sys.transmission_queue
sys.service_contract_message_usages  

Références:

Comment utiliser des certificats pour la sécurité SQL Server 2005 Service Broker distante sur plusieurs instances de SQL Server 2005

Building a Distributed Service Broker Application