Upload
microsoft
View
406
Download
3
Embed Size (px)
DESCRIPTION
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.
Citation preview
AMQPInteropérabilité et découplage de systèmes hétérogènes
avec RabbitMQ
@ZenikaITPierre QueinnecBernard Jourdain
SI actuels- Grande hétérogénéité
- ERP, CRM, DB, LDAP, etc, etc
- différentes plateformes
- différents langages
- Couplages souvent forts
- appels bloquants
- formats spécifiques
Découplage
- Solution classique au couplage : MOM
- Message-Oriented Middleware
- Asynchronisme
- “Donnée en mouvement”
- Grands Acteurs
- IBM, TIBCO, Microsoft
Implémentations
- Microsoft MSMQ
- En Java/JEE, API standardisée JMS
- uniquement une API
- ne définit pas le format du message
Topologies
- P2P (peer-to-peer)
- ESB (Entreprise Service Bus)
- Pipeline
- etc...
Scalabilité
- Difficultés des topologies “Cloud”
- Machines provisionnées dynamiquement
- Nécessité d’une interopérabilité entre middlewares
AMQP
- Advanced Message Queuing Protocol
- But de réduire le “vendor lock-in”
AMQP... un format
- AMQP est un format de message
- “wire-level”
- Pas de langage/plateforme donnés, pas d’API
- À la TCP
- interopérable
Protocoles
- Pérennité protocolaire
- IP, UDP, TCP
- HTTP, SMTP
Positionnement
SMTP ?
HTTP IIOP
async
sync
unreliable reliable
Propriétés
- Fidelity - durabilité
- Security - authentification, transport
- Transactions - fiabilité
- Smart routing - intermédiation
- Management
AMQP... un standard
- Normalisé par l’OASIS
- Version 1.0 en draft quasi-final
- Technical Committee (TC) AMQP
- Finance
- Editeurs
- Peu de Services
Composition TC
- JPMorgan, Goldman Sachs, Crédit Suisse, Deutsche Börse, Bank of America...
- Microsoft, VMware, RedHat, Cisco, Kaazing...
- HCL, Zenika
AMQP... un standard
- Au-delà du format de message...
- “Broker Semantics”
- Normalisation de l’interconnexion de brokers hétérogènes
RabbitMQ
- Implémentation de
- AMQP 0-8-0
- AMQP 0-9
- AMQP 0-9-1
- AMQP 1.0
- Open-Source (MPL)
RabbitMQ
- Ecrit en Erlang
- Bibliothèques pour tous les langages - plateformes
- .Net - Java
- Erlang, JavaScript, PHP, Ruby, Python...
Routage AMQP
Client
Client
Client
Client
Client
E
E
Exchanges Queues
m m
m
m m
m
m
pub
pub
pub
sub
sub
sub
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
Exchanges
- Routage sur :
- la clef de routage
- les headers
- les propriétés
- le contenu
Intro aux Exchanges
- Quatre types d’Exchanges par défaut
- Direct
- Fanout
- Topic
- Headers
Fanout
- Aucun test sur la clef de routage
- Le message est routé sur toutes les Queues bindées à l’Exchange
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’
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
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
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)
Cas Démo
- Elections Présidentielles 2007
- Second tour
- Visualisation des résultats du vote
Côté .Net
- MVVM Light (disponible avec Nuget)
- RabbitMQ (disponible avec Nuget)
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
Exemple ‘NON CLOS’<Dpt> <CodReg>82</CodReg> <CodReg3Car>082</CodReg3Car> <CodDpt>01</CodDpt> <CodDpt3Car>001</CodDpt3Car> <CodMinDpt>01</CodMinDpt> <LibDpt>AIN</LibDpt> <DateClotureDpt>19-‐07-‐2011</DateClotureDpt> <HeureClotureDpt>14:59:04</HeureClotureDpt> <Clos>NON CLOS</Clos></Dpt>
Exemple de résultat<Dpt> <CodReg>82</CodReg> <CodReg3Car>082</CodReg3Car> <CodDpt>01</CodDpt> <CodDpt3Car>001</CodDpt3Car> <CodMinDpt>01</CodMinDpt> <LibDpt>AIN</LibDpt> <DateClotureDpt>19-‐07-‐2011</DateClotureDpt> <HeureClotureDpt>14:59:04</HeureClotureDpt> <Clos>CLOS</Clos> <Candidat> <Nom>SARKOZY</Nom> <Prenom>Nicolas</Prenom> <Civilite>M.</Civilite> <Voix>185 165</Voix> <RapVoixExp>60,54</RapVoixExp> <NumDepCand>12</NumDepCand> <NumPanneauCand>1</NumPanneauCand> </Candidat></Dpt>
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
Côté Java
- Application générant des résultats en boucle
- Utilisation du driver Java RabbitMQ 2.7.1
Architecture
RabbitMQ
TechDays.Backend
TechDays.UI
TechDays.UI
TechDays.UI
Producteur Java
Démo!
Sources
- Seront disponibles rapidement sur GitHub
- https://github.com/zenika
Fier d’être Développeur
Votez
- Et merci à tous pour votre attention!
Questions?
Pics Credits- ‘Past’ by inf3ktion (CC BY-NC-SA 2.0)
- http://www.flickr.com/photos/inf3ktion/4116507516
- ‘Server Room Powerstrips’ by camknows (CC BY-NC-SA 2.0)
- http://www.flickr.com/photos/camknows/3726757043/
- ‘All The Same’ by inf3ktion (CC BY-NC-SA 2.0)
- http://www.flickr.com/photos/inf3ktion/3365226030
- ‘Survivor’ by inf3ktion (CC BY-NC-SA 2.0)
- http://www.flickr.com/photos/inf3ktion/3876697091
- ‘Server room with grass!’ by Tom Raftery, courtesy of 1E (CC BY-SA 2.0)
- http://www.flickr.com/photos/traftery/4773457853