AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ
-
Upload
microsoft -
Category
Technology
-
view
406 -
download
3
description
Transcript of AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ
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