Avec une hétérogénéité sans cesse grandissante des systèmes d'information des entreprises, l'interopérabilité se retrouve soudainement au coeur des critères de décision. L'un des mécanismes populaires de découplage et de communication inter-systèmes repose sur l'utilisation de technologies orientées message ("message-oriented middleware"). Ces infrastructures ont longtemps été spécialisées en termes de plateforme cible (.Net, Java, etc) mais aussi non interopérable entre elles. Le standard émergent AMQP (Advanced Message Queueing Protocol) entre alors en scène, et permet de normaliser le format même du message. Ceci afin de pouvoir faire interopérer des implémentations diverses de middleware, sans surcoût de développement. Le standard AMQP a été initialement créé par des grands acteurs du monde bancaire tels que JPMorgan Chase, Goldman Sachs, Crédit Suisse, qui ont été rejoints par Microsoft, VMware, Cisco, et biens d'autres, dont Zenika. Bernard Jourdain et Pierre Queinnec présenteront donc une approche d'interopérabilité basée sur AMQP, permettant de faire communiquer un processus Java avec les technologies Microsoft (WPF), sur un cas réel simplifié, l'affichage temps réel commune par commune des résultats des élections présidentielles... 2007. Ils se baseront pour ce faire sur l'excellente implémentation AMQP du produit open-source RabbitMQ.
13. AMQP... un standard
- Normalisé par l’OASIS
- Version 1.0 en draft quasi-final
- Technical Committee (TC) AMQP
- Finance
- Editeurs
- Peu de Services
14. Composition TC
- JPMorgan, Goldman Sachs, Crédit Suisse,
Deutsche Börse, Bank of America...
- Microsoft,VMware, RedHat, Cisco,
Kaazing...
- HCL, Zenika
15. AMQP... un standard
- Au-delà du format de message...
- “Broker Semantics”
- Normalisation de l’interconnexion de
brokers hétérogènes
17. RabbitMQ
- Ecrit en Erlang
- Bibliothèques pour tous les langages -
plateformes
- .Net - Java
- Erlang, JavaScript, PHP, Ruby, Python...
18. Routage AMQP
Client
sub
pub
Client E m m
pub sub Client
m m
pub E
Client sub
Client
m m m
Exchanges Queues
19. Workflow & Concepts
- Un Producteur poste un couple {Clef de
Routage, Message} vers un Exchange
- Un Broker route un message vers une Queue
en se basant sur sa Clef de Routage
- Un Consommateur récupère un Message
depuis une Queue
- Un Message dans une Queue ne peut être
récupéré que par un Consommateur
20. Exchanges
- Routage sur :
- la clef de routage
- les headers
- les propriétés
- le contenu
21. Intro aux Exchanges
- Quatre types d’Exchanges par défaut
- Direct
- Fanout
- Topic
- Headers
22. Fanout
- Aucun test sur la clef de routage
- Le message est routé sur toutes les Queues
bindées à l’Exchange
23. Direct
- Clef de routage obligatoire
- Chaque Queue bindée à l’Exchange fournit
une valeur de clef de routage
- Pour chaque Queue, test d’égalité entre la clef
de routage du message et la valeur fournie
- Si égalité, copie du message dans la Queue
- Exemple : clef = ‘nasdaq’
24. Headers
- Comme pour le type Direct, mais test
d’égalité sur une valeur d’entêtes (“header”)
plutôt que sur la clef de routage
- Exemple (clef = valeur)
- lang = javascript
25. Topic
- Comme pour le type Direct mais
comparaison avec possibilité d’utiliser des
wildcards
- ‘*’ pour exactement un mot
- ‘#’ pour zéro ou plus de mots
- Exemples
- comp.lang.#
- *.erlang
26. Queues
- L’Exchange route les messages vers les
Queues concernées
- Si multiple Queues, le message est traité
comme dupliqué
- La Queue stocke le message jusqu’à ce
qu’il soit récupéré par un consommateur
- Mécanisme de sécurité sur la
récupération des messages (ack)
27. Cas Démo
- Elections Présidentielles 2007
- Second tour
- Visualisation des résultats du vote
28. Côté .Net
- MVVM Light (disponible avec Nuget)
- RabbitMQ (disponible avec Nuget)
29. Côté .Net
- Application TechDays.Backend
- Lit le fichier Index.xml qui donne l’état d’un
département
- Etat ‘CLOS’ : le résultat est là
- Etat ‘NON CLOS’ : pas de résultat pour
l’instant
- Lorsque CLOS
- lit le résultat
- envoie un message à RabbitMQ
32. Côté .Net
- Application TechDays.UI
- Consommateur de messages
- Affiche les résultats reçus sur une carte
- Librairie TechDays.Messaging.RabbitMQ
- Bibliothèque de production/consommation de
messages
33. Côté Java
- Application générant des résultats en boucle
- Utilisation du driver Java RabbitMQ 2.7.1