AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

40
AMQP Interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ @ZenikaIT Pierre Queinnec Bernard Jourdain

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.

Transcript of AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

Page 1: 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

Page 2: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

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

Page 3: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ
Page 4: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

Découplage

- Solution classique au couplage : MOM

- Message-Oriented Middleware

- Asynchronisme

- “Donnée en mouvement”

- Grands Acteurs

- IBM, TIBCO, Microsoft

Page 5: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

Implémentations

- Microsoft MSMQ

- En Java/JEE, API standardisée JMS

- uniquement une API

- ne définit pas le format du message

Page 6: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

Topologies

- P2P (peer-to-peer)

- ESB (Entreprise Service Bus)

- Pipeline

- etc...

Page 7: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

Scalabilité

- Difficultés des topologies “Cloud”

- Machines provisionnées dynamiquement

- Nécessité d’une interopérabilité entre middlewares

Page 8: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

AMQP

- Advanced Message Queuing Protocol

- But de réduire le “vendor lock-in”

Page 9: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

AMQP... un format

- AMQP est un format de message

- “wire-level”

- Pas de langage/plateforme donnés, pas d’API

- À la TCP

- interopérable

Page 10: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

Protocoles

- Pérennité protocolaire

- IP, UDP, TCP

- HTTP, SMTP

Page 11: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

Positionnement

SMTP ?

HTTP IIOP

async

sync

unreliable reliable

Page 12: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

Propriétés

- Fidelity - durabilité

- Security - authentification, transport

- Transactions - fiabilité

- Smart routing - intermédiation

- Management

Page 13: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

AMQP... un standard

- Normalisé par l’OASIS

- Version 1.0 en draft quasi-final

- Technical Committee (TC) AMQP

- Finance

- Editeurs

- Peu de Services

Page 14: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

Composition TC

- JPMorgan, Goldman Sachs, Crédit Suisse, Deutsche Börse, Bank of America...

- Microsoft, VMware, RedHat, Cisco, Kaazing...

- HCL, Zenika

Page 15: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

AMQP... un standard

- Au-delà du format de message...

- “Broker Semantics”

- Normalisation de l’interconnexion de brokers hétérogènes

Page 16: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

RabbitMQ

- Implémentation de

- AMQP 0-8-0

- AMQP 0-9

- AMQP 0-9-1

- AMQP 1.0

- Open-Source (MPL)

Page 17: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

RabbitMQ

- Ecrit en Erlang

- Bibliothèques pour tous les langages - plateformes

- .Net - Java

- Erlang, JavaScript, PHP, Ruby, Python...

Page 18: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

Routage AMQP

Client

Client

Client

Client

Client

E

E

Exchanges Queues

m m

m

m m

m

m

pub

pub

pub

sub

sub

sub

Page 19: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

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

Page 20: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

Exchanges

- Routage sur :

- la clef de routage

- les headers

- les propriétés

- le contenu

Page 21: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

Intro aux Exchanges

- Quatre types d’Exchanges par défaut

- Direct

- Fanout

- Topic

- Headers

Page 22: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

Fanout

- Aucun test sur la clef de routage

- Le message est routé sur toutes les Queues bindées à l’Exchange

Page 23: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

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’

Page 24: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

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

Page 25: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

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

Page 26: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

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)

Page 27: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

Cas Démo

- Elections Présidentielles 2007

- Second tour

- Visualisation des résultats du vote

Page 28: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

Côté .Net

- MVVM Light (disponible avec Nuget)

- RabbitMQ (disponible avec Nuget)

Page 29: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

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

Page 30: AMQP: interopérabilité et découplage de systèmes hétérogènes avec 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>

Page 31: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

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>

Page 32: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

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

Page 33: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

Côté Java

- Application générant des résultats en boucle

- Utilisation du driver Java RabbitMQ 2.7.1

Page 34: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

Architecture

RabbitMQ

TechDays.Backend

TechDays.UI

TechDays.UI

TechDays.UI

Producteur Java

Page 35: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

Démo!

Page 36: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

Sources

- Seront disponibles rapidement sur GitHub

- https://github.com/zenika

Page 37: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

Fier d’être Développeur

Page 38: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

Votez

- Et merci à tous pour votre attention!

Page 39: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

Questions?

Page 40: AMQP: interopérabilité et découplage de systèmes hétérogènes avec RabbitMQ

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