Biztalk : La corrélation
Introduction :
Une des fonctions principales de Biztalk Server est de recevoir des messages de différentes sources et de les acheminer vers les destinataires concernés. Ce service de messagerie s’appuie sur les notions de publication (une source fournit un message à BizTalk : il est mis à disposition dans la base de stockage de messages de Biztalk : la MessageBox) et de souscription (chaque destinataire devant recevoir une copie du message dispose dans la MessageBox d’un ensemble de filtres permettant de sélectionner les messages adéquats).
De nombreux scénarios, notamment dans le cadre de l’utilisation de Biztalk comme EAI, s’appuient sur une distribution simple des messages : « je reçois un message et j’envoie une copie vers les bons destinataires ». Cependant l’utilisation de Biztalk couvre bien souvent des scénarios avancés, faisant appel à de la logique de traitement implémentée dans des orchestrations. Avec les orchestrations il devient possible d’implémenter des interactions beaucoup plus complexes entre les différents services connectés à Biztalk.
Avec l’utilisation des orchestrations apparait un nouveau besoin : la possibilité d’être en attente d’un événement spécifique (un message) avant de continuer le traitement. Biztalk implémente à cet effet un mécanisme connu sous le nom de corrélation. Nous allons ici examiner quelques exemples nécessitant cette fonctionnalité et dans la seconde partie nous regarderons comment celle-ci est mise en œuvre.
On peut définir la corrélation comme étant le processus permettant de déterminer vers quelle orchestration en cours d’exécution (instance d’orchestration) un message doit être envoyé. Cette détermination se fera en comparant (corrélant) des propriétés du message avec les valeurs attendues par l’orchestration.
Des orchestrations sans corrélation
Il est bien sur possible d’utiliser les orchestrations sans utiliser la corrélation. Il s’agira typiquement de traitements séquentiels ne recevant qu’un seul message en entrée (La réception dans une même orchestration de plusieurs messages nécessitera l’utilisation de la corrélation).
Quelques exemples typiques de ce genre de traitement :
· Une orchestration effectuant une vérification du message d’entrée avant de le republier.
· Une orchestration effectuant du routage dynamique par appel du moteur de règles Biztalk.

· Une orchestration générant plusieurs messages à partir d’un message d’entrée (par exemple génération d’ordre de fabrication et d’ordre de restockage à partir d’une commande client)

· Une orchestration qui attend une certaine date pour envoyer un message.
A l’exception de ce dernier cas (utilisation d’un délai), pour qu’une orchestration puisse être en attente d’un événement il sera nécessaire d’utiliser la corrélation.
Rem : Même dans le cas de l’utilisation d’un délai, il est bien fait usage de la corrélation mais de manière transparente.
La corrélation : quand ?
Le cas le plus courant qui fait usage de la corrélation est quand une orchestration envoie un message et attend une réponse en retour. Dans certains cas, cela sera totalement transparent pour le développeur et dans d’autres cas il sera nécessaire de préciser comment la corrélation doit être faite.
La corrélation se fera de manière automatique, sans nécessiter de code particulier dans le cas de l’utilisation d’un port de type requête/réponse. Par exemple, si l’orchestration appelle une méthode d’un web service, le résultat d’appel sera renvoyé automatiquement vers l’orchestration appelante bien que le message de réponse transite par la MessageBox :

La réponse est acheminée vers la bonne instance d’orchestration :

Dans d’autres cas la corrélation ne pourra être faite automatiquement et il sera nécessaire de préciser les règles d’acheminement dans l’orchestration.
Le cas le plus usuel est l’envoi d’un message pour lequel on attend une ou plusieurs réponses sur des ports différents. Par exemple une orchestration envoie une commande à un site de fabrication et attend la livraison, puis l'émission de la facture :

Un autre exemple de cas d’utilisation de la corrélation est une orchestration qui démarre plusieurs autres orchestrations et attend une réponse de celles-ci :

Conclusion
Nous venons de voir ce qu’était la corrélation et quelques scénarios d’utilisation. Dans la seconde partie, nous verrons la mise en œuvre pratique.