Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf ·...

71
Systèmes Distribués Message-Oriented Middleware Louis-Claude Canon [email protected] Bureau 414C Master 2 informatique – Semestre 9 Louis-Claude Canon SD – Message-Oriented Middleware 1 / 71

Transcript of Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf ·...

Page 1: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

Systèmes DistribuésMessage-Oriented Middleware

Louis-Claude [email protected]

Bureau 414C

Master 2 informatique – Semestre 9

Louis-Claude Canon SD – Message-Oriented Middleware 1 / 71

Page 2: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

Plan

Introduction

JMS 2.0

AMQP 0-9-1

ZeroMQ

Perspectives et bibliographie

Louis-Claude Canon SD – Message-Oriented Middleware 2 / 71

Page 3: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

Introduction

Plan

Introduction

JMS 2.0

AMQP 0-9-1

ZeroMQ

Perspectives et bibliographie

Louis-Claude Canon SD – Message-Oriented Middleware 3 / 71

Page 4: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

Introduction

Principe de la communication indirecte

I Les échanges se font par l’intermédiaire d’une structure spécifique : unport, une file, un canal, . . .

I Le flux de communication est géré par un intergiciel.I Assure un couplage faible entre les composants d’une application

distribuée (plus de souplesse/flexibilité).

Louis-Claude Canon SD – Message-Oriented Middleware 4 / 71

Page 5: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

Introduction

Intergiciel (middleware)

I Couche logicielle intermédiaire située entre l’application et le systèmed’exploitation de la machine.

I Sert à concevoir, développer et déployer une application répartie.I Un MOM (intergiciel orienté message) gère les échanges entre les

composants distribués.

Louis-Claude Canon SD – Message-Oriented Middleware 5 / 71

Page 6: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.
Page 7: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

Introduction

Services additionnels des MOMs

I Transaction : envois et réceptions groupés.I Persistence : retransmission des messages en cas de panne.I Multicast : communication de groupe.I Trace des échanges (log).I Gestion des droits d’accès.I Transparence des échanges : protocole de communication facilitant

l’encapsulation d’objets ou d’autres données typées.

Louis-Claude Canon SD – Message-Oriented Middleware 7 / 71

Page 8: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

Introduction

Contexte applicatif

I Application de type workflow (gestion de flux) : desdocuments/informations/tâches sont transmis de participant enparticipant suivant une procédure donnée.

I Exemple : application web gérant la commande d’un client.I Stocker la commande dans un système géré par un tiers (audit).I Envoyer un mail de confirmation au client.I Transmettre les informations liées à la commande au système

d’expédition.

Louis-Claude Canon SD – Message-Oriented Middleware 8 / 71

Page 9: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.
Page 10: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

Plan

Introduction

JMS 2.0

AMQP 0-9-1

ZeroMQ

Perspectives et bibliographie

Louis-Claude Canon SD – Message-Oriented Middleware 10 / 71

Page 11: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

Architecture de l’interface JMS

I Fournisseur JMS (provider) : système de messagerie.I Clients JMS : composants produisant et consommant des messages.I Messages : contient les informations communiquées entre les clients.I Objets administrés : objets JMS configurés par un administrateur.

Louis-Claude Canon SD – Message-Oriented Middleware 11 / 71

Page 12: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.
Page 13: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

Styles de communication

I Communication point-à-point :I Les messages transitent par une file (queue).I Chaque message n’a qu’un seul consommateur.I Le récepteur peut consommer le message même s’il était hors-ligne

lorsque ce dernier a été émis.I Communication publication/abonnement (publish/subscribe) :

I Les messages transitent par un sujet (topic).I Chaque message peut avoir plusieurs consommateurs.I Un client qui s’abonne à un sujet ne peut consommer que les messages

émis après l’abonnement.

Louis-Claude Canon SD – Message-Oriented Middleware 13 / 71

Page 14: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.
Page 15: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.
Page 16: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

Consommation des messages

I Synchrone : un consommateur peut explicitement recevoir un messagede la destination avec la méthode bloquante receive.

I Asynchrone : une application peut enregistrer un listener avec unconsommateur. Lorsqu’un message sera reçu, la méthode onMessagesera appelée.

Louis-Claude Canon SD – Message-Oriented Middleware 16 / 71

Page 17: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

Séquence des messages en mode synchroneProducteur MOM Consommat.

send

receive

Louis-Claude Canon SD – Message-Oriented Middleware 17 / 71

Page 18: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

Séquence des messages en mode asynchroneProducteur MOM Consommat.

setMessageListener

send

onMessage

Louis-Claude Canon SD – Message-Oriented Middleware 18 / 71

Page 19: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

Objets principaux

Objets administrés Les fabriques (connection factories) et les destinations.Connections Représente un socket TCP/IP.

Sessions Représente un ensemble d’échanges suivant un mode donné.JMSContext Regroupe une connexion et une session.Producteurs de messages Envoie des messages.Consommateurs de messages Reçoit des messages.

Messages Information échangée.

Louis-Claude Canon SD – Message-Oriented Middleware 19 / 71

Page 20: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.
Page 21: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

Objets administrésConnection factoriesI Permet de créer une connexion auprès d’un fournisseur.I Injection JNDI.

@Resource(lookup = "java:comp/DefaultJMSConnectionFactory")private static ConnectionFactory connectionFactory;

DestinationsI Représente soit des files, soit des sujets.

@Resource(lookup = "jms/MyQueue")private static Queue queue;

@Resource(lookup = "jms/MyTopic")private static Topic topic;

Louis-Claude Canon SD – Message-Oriented Middleware 21 / 71

Page 22: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

Connexion et session

I Connexion : peut représenter un seul socket TCP/IP et est associé àune ou plusieurs sessions.

I Session : contexte pour envoyer et recevoir des messages. Permet degrouper les échanges au sein d’une transaction.

Louis-Claude Canon SD – Message-Oriented Middleware 22 / 71

Page 23: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

JMSContext

I Combine une connexion et une session.I Permet de créer des producteurs et des consommateurs de messages,

des messages et des destinations temporaires.

JMSContext context = connectionFactory.createContext();context.close();

Louis-Claude Canon SD – Message-Oriented Middleware 23 / 71

Page 24: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

JMSProducer

I Nécessaire pour l’envoi d’un message.I Objet léger, peut être recréé à chaque utilisation.

context.createProducer().send(dest, message);

Louis-Claude Canon SD – Message-Oriented Middleware 24 / 71

Page 25: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

JMSConsumer et réception synchrone

I Nécessaire pour la réception d’un message.I Possibilité de donner une échéance en argument.

JMSConsumer consumer = context.createConsumer(dest);Message m = consumer.receive();

Louis-Claude Canon SD – Message-Oriented Middleware 25 / 71

Page 26: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

JMSConsumer et réception asynchrone

I Un listener doit implémenter l’interface MessageListener quicontient une méthode, onMessage.

I La méthode onMessage est invoquée à la réception de chaquemessage.

MessageListener myListener = new MessageListener();consumer.setMessageListener(myListener);

Louis-Claude Canon SD – Message-Oriented Middleware 26 / 71

Page 27: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

JMSConsumer et sélecteur de messages

I Les messages reçus peuvent être filtrés.I Syntaxe basée sur un sous-ensemble de SQL92.I La sélection se fait sur les propriétés des messages.

message = session.createTextMessage();message.setStringProperty("NewsType", "Sports");

String sel = "NewsType = 'Sports' OR NewsType = 'Opinion'";JMSConsumer consumer = context.createConsumer(dest, sel);

Louis-Claude Canon SD – Message-Oriented Middleware 27 / 71

Page 28: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

JMSConsumer et sujet

I Pas de différence avec les files dans la syntaxe.I Tous les messages reçus lors d’une déconnexion sont perdus.

JMSConsumer consumer = context.createConsumer(dest);

Louis-Claude Canon SD – Message-Oriented Middleware 28 / 71

Page 29: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.
Page 30: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

JMSConsumer et sujet durable

I Tous les messages reçus lors d’une déconnexion sont conservés.I Permet de réutiliser une inscription grâce à son identifiant.I La désinscription devient nécessaire.

String subName = "MySub";JMSConsumer consumer = context.createDurableConsumer(dest, subName);context.unsubscribe(subName);

Louis-Claude Canon SD – Message-Oriented Middleware 30 / 71

Page 31: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.
Page 32: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

JMSConsumer et sujet partagé

I Les messages seront répartis entre ceux qui ont participé à l’inscription.

String subName = "MySub";JMSConsumer consumer = context.createSharedConsumer(dest, subName);

Louis-Claude Canon SD – Message-Oriented Middleware 32 / 71

Page 33: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

Messages JMS

Contient trois parties :En-tête Ensemble de champs possédant des valeurs déterminées par le

client ou le fournisseur.Propriétés Champs spécifiés par l’application et servant aux sélecteurs.

Corps 6 types différents.

Louis-Claude Canon SD – Message-Oriented Middleware 33 / 71

Page 34: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

En-tête des messages JMS

Champ Description Défini parJMSDestination Destination du message. fournisseurJMSPriority Priorité du message. fournisseurJMSMessageID Identifiant du message. fournisseur

JMSTimestamp La date de réception du message parle fournisseur. fournisseur

JMSCorrelationID L’identifiant du message relatif. applicationJMSReplyTo Destination à utiliser pour la réponse. application. . .

Louis-Claude Canon SD – Message-Oriented Middleware 34 / 71

Page 35: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

Corps des messages JMS

Type DescriptionTextMessage Une chaîne de caractères.MapMessage Un ensemble de paires clé-valeur.BytesMessage Un flot de données binaires.StreamMessage Un flot de données primitives.ObjectMessage Un objet sérialisé.Message Ne contient rien.

Louis-Claude Canon SD – Message-Oriented Middleware 35 / 71

Page 36: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

Exceptions JMS

IllegalStateException // file créée sur un TopicSessionInvalidDestinationException // mauvaise destinationInvalidSelectorException // problème de syntaxe du sélecteur...

Louis-Claude Canon SD – Message-Oriented Middleware 36 / 71

Page 37: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.
Page 38: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

Exemple d’échange d’une chaîne de caractères

String message = "This is a message";TextMessage m = context.createTextMessage();m.setText(message);context.createProducer().send(dest, m);

JMSConsumer consumer = context.createConsumer(dest);Message m = consumer.receive();if (m instanceof TextMessage) {

String message = m.getBody(String.class);System.out.println("Reading message: " + message);

} else {// Handle error or process another message type

}

Louis-Claude Canon SD – Message-Oriented Middleware 38 / 71

Page 39: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

Exemple simplifié

String message = "This is a message";context.createProducer().send(dest, message);

JMSConsumer consumer = context.createConsumer(dest);String message = consumer.receiveBody(String.class);

Louis-Claude Canon SD – Message-Oriented Middleware 39 / 71

Page 40: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

Mode de session

AUTO_ACKNOWLEDGE Un accusé de réception est transmis automatiquementà chaque réception.

CLIENT_ACKNOWLEDGE Un accusé de réception est transmis lors de l’appelà la méthode acknowledge.

DUPS_OK_ACKNOWLEDGE Un accusé de réception est transmisparesseusement (un message peut être reçu plusieurs fois).

TRANSACTED Spécifie que la session est en mode transactionnel.

Louis-Claude Canon SD – Message-Oriented Middleware 40 / 71

Page 41: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

Transaction

I Permet de grouper l’envoi et la réception de messages en les terminantpar l’appel de la méthode commit. Exemples :I Un client envoie deux messages mais ne souhaite pas qu’en cas de

défaillance (du client), seul le premier soit reçu par le fournisseur.I Un client reçoit deux messages mais ne souhaite pas qu’en cas de

défaillance (du client), seul le premier soit reçu et traité.I On annule une transaction par l’appel de la méthode rollback.I Il ne faut pas grouper un envoi et une réception qui soit en attente

d’une réponse du message envoyé. Cela provoque un interblocage.

Louis-Claude Canon SD – Message-Oriented Middleware 41 / 71

Page 42: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

Persistance

I Les messages peuvent être persistants ou non. Seul un messagepersistant survit à la défaillance du fournisseur.

I La durabilité est une propriété liée à un abonnement alors que lapersistance est une propriété liée à un message.

Louis-Claude Canon SD – Message-Oriented Middleware 42 / 71

Page 43: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

Spécificités de JMS 1.1

I API plus complexe et moins flexible.I N’exploite pas les propriétés récentes du langage Java.I Rétrocompatible.I Les classes JMSContext, JMSProducer et JMSConsumer n’existent

pas.

Louis-Claude Canon SD – Message-Oriented Middleware 43 / 71

Page 44: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

Envoi d’un message (JMS 1.1)

public void sendMessageJMS11(ConnectionFactory connFactory,Queue queue, String text) {

try {Connection conn = connFactory.createConnection();try {

Session session = conn.createSession(false,Session.AUTO_ACKNOWLEDGE);

MessageProducer msgProducer= session.createProducer(queue);

TextMessage textMsg = session.createTextMessage(text);msgProducer.send(textMsg);

} finally {conn.close();

}} catch (JMSException ex) {// handle exception (details omitted)

}}

Louis-Claude Canon SD – Message-Oriented Middleware 44 / 71

Page 45: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

Envoi d’un message (JMS 2.0)

public void sendMessageJMS20(ConnectionFactory connFactory,Queue queue, String text) {

try (JMSContext context = connFactory.createContext()) {context.createProducer().send(queue, text);

} catch (JMSRuntimeException ex) {// handle exception (details omitted)

}}

I JMSContext regroupant Connection et Session.I Construction try-with-resources de Java 7.I Construction du TextMessage automatique.I Un JMSProducer n’est pas associé à une destination.

Louis-Claude Canon SD – Message-Oriented Middleware 45 / 71

Page 46: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

Réception d’un message (JMS 1.1)public String rcvMessageJMS11(ConnectionFactory connFactory,

Queue queue){String body = null;try {

Connection conn = connFactory.createConnection();try {

Session session = conn.createSession(false,Session.AUTO_ACKNOWLEDGE);

MessageConsumer msgConsumer= session.createConsumer(queue);

conn.start();TextMessage textMsg

= (TextMessage)msgConsumer.receive();body = textMsg.getText();

} finally {conn.close();

}} catch (JMSException ex) {// handle exception (details omitted)

}return body;

}

Louis-Claude Canon SD – Message-Oriented Middleware 46 / 71

Page 47: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

Réception d’un message (JMS 2.0)

public String rcvMessageJMS20(ConnectionFactory connFactory,Queue queue){

String body=null;try (JMSContext context = connFactory.createContext()) {

JMSConsumer consumer = context.createConsumer(queue);body = consumer.receiveBody(String.class);

} catch (JMSRuntimeException ex) {// handle exception (details omitted)

}return body;

}

I Pas d’appel à context.start().I Un JMSConsumer est associé à une destination.

Louis-Claude Canon SD – Message-Oriented Middleware 47 / 71

Page 48: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

Création de session

JMS 1.1 :Session createSession(boolean transacted,

int acknowledgeMode)throws JMSException;

// Session.AUTO_ACKNOWLEDGE, Session.CLIENT_ACKNOWLEDGE ou// Session.DUPS_OK_ACKNOWLEDGE

JMS 2.0 :JMSContext createContext(int sessionMode) throws JMSException;// JMSContext.AUTO_ACKNOWLEDGE, JMSContext.CLIENT_ACKNOWLEDGE,// JMSContext.DUPS_OK_ACKNOWLEDGE ou JMSContext.TRANSACTED

JMSContext createContext() throws JMSException;

Louis-Claude Canon SD – Message-Oriented Middleware 48 / 71

Page 49: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

Délai de délivrance

JMS 1.1 :try (Connection conn = connFactory.createConnection()) {

Session session = conn.createSession();MessageProducer msgProducer

= session.createProducer(queue);msgProducer.setDeliveryDelay(20000);TextMessage textMsg = session.createTextMessage("Hello");msgProducer.send(textMsg);

}

JMS 2.0 :try (JMSContext context = connFactory.createContext()) {

context.createProducer().setDeliveryDelay(20000).send(queue,"Hello world");

}

Louis-Claude Canon SD – Message-Oriented Middleware 49 / 71

Page 50: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

JMS 2.0

Caractéristiques clés de JMS

I Couplage faible entre les participants (ils n’ont pas tous besoin d’êtreconnectés au même moment).

I Fiabilité (durable, persistent).I Performance (distribution de la charge, débit important).

Louis-Claude Canon SD – Message-Oriented Middleware 50 / 71

Page 51: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

AMQP 0-9-1

Plan

Introduction

JMS 2.0

AMQP 0-9-1

ZeroMQ

Perspectives et bibliographie

Louis-Claude Canon SD – Message-Oriented Middleware 51 / 71

Page 52: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

AMQP 0-9-1

JMS et AMQP

AMQPProtocole réseau (wire-level) pour l’échange de messages sur des files :I Définit des règles sur les valeurs binaires échangées.I Indépendance vis-à-vis des vendeurs.

JMSInterface de programmation (coté client) :I Définit les fonctions permettant de contrôler le middleware.I Les clients et le serveur JMS doivent utiliser la même implémentation.I Le même code pourra être utilisé avec n’importe quelle implémentation.

Louis-Claude Canon SD – Message-Oriented Middleware 52 / 71

Page 53: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

AMQP 0-9-1

File

Même fonctionnement pour les files qu’avec JMS :

Louis-Claude Canon SD – Message-Oriented Middleware 53 / 71

Page 54: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

AMQP 0-9-1

Exchange

Distinction entre les exchanges (point d’arrivé des messages) et les files(point de retrait) :

Les exchanges sont liés aux files par des bindings.

Louis-Claude Canon SD – Message-Oriented Middleware 54 / 71

Page 55: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

AMQP 0-9-1

Types d’exchanges

Trois types : fanout (équivalent des sujets JMS), direct (sujets JMS avecfiltres) et topic (sujets JMS avec filtres avancés).

Louis-Claude Canon SD – Message-Oriented Middleware 55 / 71

Page 56: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

AMQP 0-9-1

RPC

Réaliser une invocation à distance avec une file :

AvantagesI Répartition de la charge (rajouter des consommateurs).I Pas besoin d’annuaire.I Répartition des fonctions sur différents serveurs (filtres).

Louis-Claude Canon SD – Message-Oriented Middleware 56 / 71

Page 57: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

AMQP 0-9-1

Concepts et équivalence JMS

File Stocke les messages en attente d’être consommés (file).Exchange Point d’entré des messages.Bindings Relie une file à un exchange.

Vhost Séparation virtuelle entre différents ensembles de files etd’exchanges.

Connection Socket TCP/IP après authentification (Connection).Channel Regroupe un ensemble d’échanges (Session).Durable Propriété d’une file ou d’un exchange (persistent).

Persistent Propriété d’un message (persistent).

Louis-Claude Canon SD – Message-Oriented Middleware 57 / 71

Page 58: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

ZeroMQ

Plan

Introduction

JMS 2.0

AMQP 0-9-1

ZeroMQ

Perspectives et bibliographie

Louis-Claude Canon SD – Message-Oriented Middleware 58 / 71

Page 59: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

ZeroMQ

Particularités

I Communication directe et indirecte : on manipule des sockets, mais onpeut facilement simuler un fournisseur.

I Bilan des solutions lors du développement d’une application distribuée :I La laisser centralisée (ne passe pas à l’échelle).I La distribuer en utilisant directement des sockets TCP/IP (bas niveau,

nécessité de réimplémenter de nombreuses fonctionnalités).I Stocker les données dans des bases de données (inadapté pour des

échanges dynamiques).I Utiliser un fournisseur JMS ou AMQP (coût d’administration).

I Objectif : fournir une solution haut-niveau pour les projets modestesavec un coût de performance et d’administration minimal.I Couplage faible (les machines peuvent se connecter après l’envoi d’un

message).I Schémas de communication (multicast).I Sans fournisseur.

Louis-Claude Canon SD – Message-Oriented Middleware 59 / 71

Page 60: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

Perspectives et bibliographie

Plan

Introduction

JMS 2.0

AMQP 0-9-1

ZeroMQ

Perspectives et bibliographie

Louis-Claude Canon SD – Message-Oriented Middleware 60 / 71

Page 61: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

Perspectives et bibliographie

Historique de JMS

I JMS 1.0 (2001).I JMS 1.1 (2002).I JMS 2.0 inclus dans Java EE 7 (avril/mai 2013).

Louis-Claude Canon SD – Message-Oriented Middleware 61 / 71

Page 62: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

Perspectives et bibliographie

Implémentations pour JMS

Les plus populaires et les plus performantes

Apache ActiveMQ JMS 1.1.HornetQ (JBoss) JMS 1.1, JMS 2.0 (depuis le 16 décembre 2013). Devient

Apache ActiveMQ Artemis en 2014.

Autres implémentations connues

JORAM JMS 1.1, JMS 2.0 (depuis le 2 octobre 2013).OpenMQ (GlassFish) Implémentation de référence de Oracle.

Louis-Claude Canon SD – Message-Oriented Middleware 62 / 71

Page 63: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

Perspectives et bibliographie

Historique d’AMQP

Advanced Message Queuing Protocol :I 0-8 (juin 2006)I 0-9 (décembre 2006)I 0-10 (février 2008)I 0-9-1 (novembre 2008)I 1.0 (octobre 2011)I Standard OASIS (octobre 2012)I Standard ISO/IEC (avril 2014)

Louis-Claude Canon SD – Message-Oriented Middleware 63 / 71

Page 64: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

Perspectives et bibliographie

RabbitMQ

I Implémentation la plus populaire d’AMQP.I Écrit en Erlang.I Supporte les versions 0-8, 0-9 et 0-9-1.

Louis-Claude Canon SD – Message-Oriented Middleware 64 / 71

Page 65: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

Perspectives et bibliographie

Historique récapitulatif

2001

2001

2002

2002

2003

2003

2004

2004

2005

2005

2006

2006

2007

2007

2008

2008

2009

2009

2010

2010

2011

2011

2012

2012

2013

2013

2014

2014

2015

2015

2016

2016

2017

2017

2018

2018

•1.0JMS •1.1 •2.0

•0-8AMQP •0-9 •0-9-1

•0-10

•1.0

•0.3

ZeroMQ •1.0

•2.0

•3.0

•4.0

•ZMTP/1.0

•2.0 •3.0 •3.1

Louis-Claude Canon SD – Message-Oriented Middleware 65 / 71

Page 66: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

Perspectives et bibliographie

Récapitulatif sur les implémentations

Standard/vendeur Implémentation principaleIBM WebSphere MQTIBCO Enterprise Message ServiceJMS 1.1 Apache ActiveMQJMS 2.0 Apache ActiveMQ ArtemisAMQP 0-9-1 RabbitMQAMQP 0-10/1.0 Apache QPidZMTP ZeroMQ

Et aussi Sparrow, Starling, Kestrel, Beanstalkd, SQS, Apache Kafka,EagleMQ, IronMQ, . . .

Louis-Claude Canon SD – Message-Oriented Middleware 66 / 71

Page 67: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

Perspectives et bibliographie

Documentation officielle

I Documentation de l’interface JMS 2.0I Spécification JMS 2.0I Tutoriel sur les conceptsI Tutoriel sur les exemplesI Code des exemples des tutoriels

Louis-Claude Canon SD – Message-Oriented Middleware 67 / 71

Page 68: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

Perspectives et bibliographie

Java Message Service, seconde édition, 2009

N’aborde pas la version 2.0.

Louis-Claude Canon SD – Message-Oriented Middleware 68 / 71

Page 69: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

Perspectives et bibliographie

RabbitMQ in Action, 2012

Spécifique à l’implémentationdominante du protocole, AMQP0-9-1. Assez complémentaire avec ladocumention en ligne.

Louis-Claude Canon SD – Message-Oriented Middleware 69 / 71

Page 70: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

Perspectives et bibliographie

ZeroMQ, 2013

Reprend essentiellement le guideZeroMQ accessible en ligne.

Louis-Claude Canon SD – Message-Oriented Middleware 70 / 71

Page 71: Systèmes Distribués - Message-Oriented Middlewarelccanon.free.fr/teaching/SD/MOM.pdf · 2020-01-16 · Introduction JMS2.0 AMQP0-9-1 ZeroMQ Perspectivesetbibliographie Louis-ClaudeCanonSD–Message-OrientedMiddleware2/71.

Perspectives et bibliographie

Discussions sur des questions liées

I Real world use of JMS/message queues?I In which domains are message oriented middleware like AMQP useful?I What is Java Message Service (JMS) for?I ActiveMQ Use CasesI Should you use JMS in your next enterprise application?I Why should I use JMS and not RMI+Queue?I Message Queue vs. Web Services?

Louis-Claude Canon SD – Message-Oriented Middleware 71 / 71