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

Transcript
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