Message Oriented Middleware (MOM) Java Message Service (JMS)
Message Oriented Middleware (MOM) Java Message Service (JMS)
[Link]
[Link]
Didier DONSEZ !!
Université Joseph Fourier (Grenoble 1)
PolyTech Grenoble LIG ERODS
[Link]@[Link]
[Link]@[Link]
17/05/2014 MOM & JMS, Didier Donsez, 1998-2012 2
1
18/05/2014
17/05/2014
Motivations
Modèle Client-Serveur
requêtage synchrone
RPC DCE et DCOM, CORBA, RMI
inconvénient : connexion permanente des 2 parties
Problème des pannes/connexions transitoires
Delay-Tolerant Networks
MOM & JMS, Didier Donsez, 1998-2012 – F. Baude 2014
17/05/2014
Motivations
Applications (passage à très grande échelle)
Diffusion d ’information (push)
news, stock quote, weather forecast ...
Messagerie inter-bancaire, workflow, ERP, ...
Synchronisation de BD nomades et réplicat asynchrone (hot
standby)
EAI (Enterprise Application Integration), B2B
...
2
18/05/2014
17/05/2014
Principe
Messagerie inter-application
Asynchrone
Non temps réel – Offline (Not online)
s ’oppose aux ORBs synchrones (Corba, DCOM, RMI)
Avantages
Insensible aux partitions de réseaux (sans fil, satellite, WLAN, …)
17/05/2014
3
18/05/2014
17/05/2014
File de message A2
…
// consommation d ’un msg
L ’application A1
s ’est terminée
1 MQGET(queue,msg)
1 process(msg)
MOM & JMS, Didier Donsez, 1998-2012
17/05/2014
File de message A2
…
// consommation d ’un msg
MQGET(queue,msg)
2 process(msg)
…
A3
…
MOM & JMS, Didier Donsez, 1998-2012
4
18/05/2014
17/05/2014
File de message A2
…
// consommation d ’un msg
MQGET(queue,msg)
2 process(msg)
…
// consommation d ’un msg
MQGET(queue,msg)
Le message est retiré 2 process(msg)
MOM & JMS, Didier Donsez, 1998-2012
de la file …
par MQGET
L ’application A3
s ’est terminée
17/05/2014
Modèles de messageries
Routage de Message
par l ’identité de l ’application
par le contenu du message
chaque application consommateur définit un critère sur les messages à
consommer
le critère peut être 1 expression booléenne sur les valeurs de champs du
message
Modèles
Message Queue (e.g. ma boite aux lettres mail)
un message envoyé (produit) est consommé par un seul client
Publication-Souscription
MOM & JMS, Didier Donsez, 1998-2012
5
18/05/2014
17/05/2014
2 1
A3
A4
… …
// production d ’un msg 2
MOM & JMS, Didier Donsez, 1998-2012
11
17/05/2014
Modèle Publication-Souscription
P1 S1
… …
// production d ’un msg Topic TGET(topic,msg1)
build(msg1) process(msg1)
TPUT(topic,msg1) TGET(topic,msg2)
... 1 process(msg2)
…
2 1
P2
S2
… …
MOM & JMS, Didier Donsez, 1998-2012
12
6
18/05/2014
17/05/2014
Publication-Souscription
sur des topics hiérarchiques
13
17/05/2014
Publication-Souscription par le
contenu
P1 S1
… …
// production d ’un msg MQGET(queue,msg,filter12)
build(msg1) Topic process(msg)
MQPUT(queue,msg1,prop1) MQGET(queue,msg, filter12)
process(msg)
...
1 …
2 1
Pre-traitement Post-traitement
P2
… S2
…
// production d ’un msg
2 MQGET(queue,msg, filter2)
MOM & JMS, Didier Donsez, 1998-2012
build(msg2)
process(msg)
MQPUT(queue,msg2,prop12)
…
...
Attention: ne pas confondre Filtering sur 1 Topic (ex: JMS) et véritable content based 14
7
18/05/2014
17/05/2014
Modèle Requête-Réponse
Implémente le modèle Client-Serveur
App «Serveur»
17/05/2014
Modèles de messageries
Routage hiérarchiques de Messages
Motivation : Passage à l‘échelle de la remontée des évènements
Hiérarchisation des publicateurs et des souscripteurs
Fonctions des routeurs
Filtrage, fusion, store and forward
Exemple
Parc d’onduleur --- event (charge, conso, ...) ---> maintance server
Réseaux d’opérateurs
Publisher
MOM & JMS, Didier Donsez, 1998-2012
(UPS) Sub&Pub
Publisher (Site mng sv)
(UPS) Subscriber
Publisher
(UPS) (glob mng sv)
Sub&Pub
Publisher (Site mng sv)
(UPS) 16
8
18/05/2014
17/05/2014
Serveurs MOM
reliés entre eux de manière épisodique
réseau mobile, réseau WAN sur lignes dédiés, …
Administrateur/Contrôleur du MOM
MOM & JMS, Didier Donsez, 1998-2012
17
17/05/2014
Implémentation
Architecture
Centralisée : Spoke and Hub client client client
MOM
client client client client Server
Distribuée : Bus
MOM MOM
Server Server
MOM & JMS, Didier Donsez, 1998-2012
QoS
Disponibilité (du MOM?), Causalité msgs délivrés respectée, Fiabilité
(perte possible msgs?), Passage à l’échelle, Sécurité, …
18
9
18/05/2014
17/05/2014
Connections Connections
permanentes épisodiques
MOM Client entre le client entre les serveurs MOM Client
et son serveur
Message Message
Repository Repository
MOM Product
19
17/05/2014
Exemple multiplateforme d ’un MOM
(IBM MQ-Series)
Hétérogénéité de Systèmes et de Réseaux
network network
WinNT AS400 MVS
IBM MQ-Series
20
10
18/05/2014
17/05/2014
21
17/05/2014
MOM Server Wide Area MOM Server Wide Area MOM Server
Network Network
Message Message Message
Repository Repository Repository
MOM & JMS, Didier Donsez, 1998-2012
11
18/05/2014
17/05/2014
17/05/2014
Opérateurs Cloud
PubSub-as-a-Service
Xively
Axeda
[Link]
Thingworx
[Link]
ClearBlade
2lemetry
AirVantage
MOM & JMS, Didier Donsez, 1998-2012
WSO2 MB
…
Twitter dans une certaine mesure (Hashtag=topic).
24
12
18/05/2014
17/05/2014
AMQP
Advanced Message Queuing Protocol
[Link]
Red Hat, Cisco Systems, IONA, iMatix, …
Standardiser l'échange de messages entre serveurs
de message (standard OASIS) hétérogènes
[Link]
Support des transactions XA (two phases commit)
Transaction (distribuée ou pas): l’émetteur peut englober un paquet de
messages dans une transaction, ces messages ne pourront être lus que lorsque
l’émetteur les aura acquittés.
MOM & JMS, Didier Donsez, 1998-2012
Implémentations
Red Hat Enterprise MRG, IONA, …
OpenAMQ, Apache QPid, ActiveMQ plus récemment …
JORAM, RabbitMQ: a solid multiprotocol, polyglot broker :it can send STOMP, MQTT, or AMQP
in and get one of the other ones out., 25
message from a Java message producer to a Ruby message consumer. Since Ruby can’t use
JMS, you need a message broker that can bridge the two platforms and transform the
protocol and message structure used by each platform. Since the most popular choice for
Ruby is the STOMP protocol you would need a message broker that can support both
STOMP and JMS at the same time. You can use ActiveMQ but … you would be locked into
one specific vendor solution (or in some cases only a few vendor choices) due to the built-
in message bridge. Whereas JMS provides a standard messaging API for the Java Platform,
AMQP provides a standard messaging protocol across all platforms. AMQP has taken the
broker-agnostic benefits of JMS within the Java Platform and escalated that concept to all
platforms=> autant prendre une plateforme qui est AMQP si le but est de supporter
l’hétérogénéité des lges/plateformes
• The routing model of AMQP essentially separates the transport model from the queuing
model
13
18/05/2014
Since DDS discovery is spontaneous, the topics can dynamically change over
the lifetime of a deployed distributed system based on DDS, without any
administrative impact.
≠ JMS: Static destinations are discovered via JNDI APIs, which bind logical
destination names to destination objects. The static destinations accessible this
way must have been previously configured in the JMS middleware (server)
using vendor supplied administrative tool
17/05/2014
MQ Telemetry Transport (MQTT)
[Link] (IBM defined)
Protocole léger de type Publish-Subscribe (no queue) pour M2M
Hiérarchie de « topics » : /buildingF/sensors/s11/#
Support de connectivité (TPC/IP) intermittente ou couteuse
Satellite, WSN, ...
Faible overhead par paquet (2 octets)
3 niveaux de QoS pour livraison (fire-and-forget, fire-and-confirm)
0 (At Most Once),1 (At Least Once) and 2 (Exactly Once)
Retained messages
Sécurité par certificat (SSL/TLS) + user-password
Nombreuses implémentations de clients et de serveurs concises
C, C++, Arduino, Java, Python, JS ([Link]), Lua, …
MOM & JMS, Didier Donsez, 1998-2014
28
14
18/05/2014
17/05/2014
Comparaison de protocoles
MOM & JMS, Didier Donsez, 1998-2012
(supposant qu’ils ont été implantés)
Messaging Technologies , A Comparison Between DDS, AMQP, MQTT, JMS and REST , PrismTech
Andrew Foster , [Link]
31
17/05/2014
Comparaison
(supposant qu’ils ont été implantés)
MOM & JMS, Didier Donsez, 1998-2012
Messaging Technologies , A Comparison BetweenDDS, AMQP, MQTT, JMS and REST , PrismTech
Andrew Foster , Spetember 2013, http:// [Link]/sites/default/files/documents/[Link]
32
15
18/05/2014
17/05/2014
Le Transactionnel
La consommation et la production de messages
peuvent être des actions recouvrables
une file des messages est considérée comme une ressource recouvrable
de la file
en cas d ’abandon de la transaction, les messages produits sont
abandonnés (=non envoyés) et aucun message consommé n’est acquitté
ce qui implique qu’il reste/’’est remis dans la file’’, et sera donc re-délivré
La transaction peut être distribuée (cad inclut d’autres
partenaires externes au MOM)
Moniteur transactionnel (XA – j2ee, MTS - msoft , …)
33
17/05/2014
Conséquences du Transactionnel
L ’ordre de consommation des messages peut être différent
de l ’ordre de production
begin T1
T1 produit M1
T1 produit M2
commit T1 => M1 et M2 sont bien dans la file
begin T2
T2 consomme M1 => M1 est retiré de la file
MOM & JMS, Didier Donsez, 1998-2012 – F. Baude 2014
begin T3
T3 consomme M2 => M2, msg suivant est retiré de la
file
abort T2 => M1 est remis dans la file
commit T3 => confirmation que M2 est bien retiré
begin T4
T4 consomme M1 => M1 est donc consommé après que M2
l’ait été
commit T4 34
16
18/05/2014
17/05/2014
Conséquences du Transactionnel
Conception de Requête-Réponse transactionnel
l ’envoi de la requête et la réception de la réponse sont
forcément dans 2 transactions successives : Pourquoi ??
process request T3
begin trans send(response)
T2 receive(response) commit trans
... …
commit trans File de réponse 35
Il y de nombreux usages des transactions JMS, d'une manière générale pour assurer la
cohérence:
• Une application peut par exemple émettre 10 messages et être assurée que soit tous
seront bien émis, soit aucun ne le sera.
• Une application qui jouerait un rôle de relais pourra ainsi lire un message sur une
queue, le traiter, et écrire un message résultant sur une queue en aval, tout cela au
sein d'une transaction, et donc avec la garantie de ne pas perdre de message si elle est
MOM & JMS, Didier Donsez, 1998-2012 – F. Baude 2014
17
18/05/2014
17/05/2014
Acteurs et Produits MOM
« incontournables » pour l’entreprise
BEA MessageQ
IBM - MQ Series
25 plateformes
Sybase - DBQ
Adaptive Serveur
Tibco - TIB/RendezVous
accord avec Oracle pour Oracle 8
Apache ActiveMQ/Apollo
support de AMQP,STOMP, groupes de mesgs avec délivrance ordonnée,
39 …
17/05/2014
40
18
18/05/2014
17/05/2014
IBM MQSeries/WebSphere MQ
Leader du marché (66% du marché)
Plates-formes
>20 plates-formes
5 protocoles réseaux
Nombreux modules
Publish/Subscribe, Workflow, ...
MOM & JMS, Didier Donsez, 1998-2012 – F.
17/05/2014
Modèles (v3)
One-To-One, One-To-Many
Distribution Lists
Real-Time Messaging Multicast
42
19
18/05/2014
17/05/2014
Client
Windows CE, Win9x, …
43
17/05/2014
WS-ReliableMessaging
“WS-RM is designed to control reliable delivery of single SOAP messages or
sequences of SOAP messages between two endpoints, irrespective of how these
endpoints are connected”
Reproduit en quelque sorte le fonctionnement de TCP en multi-hop->session
20
18/05/2014
17/05/2014
Exemple d ’ASP
utilisant MSMQ et MTS
<%@ TRANSACTION=REQUIRED LANGUAGE=JScript %>
<HTML><HEAD><TITLE>Envoi transactionnel par MSMQ</TITLE></HEAD><BODY>
<h1>Envoi transactionnel par MSMQ</h1><hr>>
<%
QueueInfo = [Link]("[Link]")
[Link] = ".\\IIS_SDK_TRANSACTED";
Queue = [Link](2, 0);
Msg = [Link]("[Link]");
[Link] = "Corps du Message"; [Link] = "Label du Message";
[Link] = 1; // recouverable : résiste au crash et au shutdown
[Link] = 1; // chiffré
[Link](Queue);
[Link]();
%>
MOM & JMS, Didier Donsez, 1998-2012
</BODY></HTML>
<%
function OnTransactionCommit() {
[Link] ("<p>La transaction est validée et le message MSMQ est envoyé."); }
function OnTransactionAbort() {
[Link] ("<p>La transaction est abandonnée");
[Link] ("et le message MSMQ n ’a pas été envoyé."); } %> 45
17/05/2014
Open Source
Utilisation
Kelkoo (remontée de log)
Schneider Electric (remontée de mesures de capteurs)
…
46
21
18/05/2014
17/05/2014
Ordre local
47
17/05/2014
JORAM (ObjectWeb & Scalagent)
Architecture Multi-Serveurs
Une destination par serveur
U U U U U
MOM & JMS, Didier Donsez, 1998-2012
Queue2
Queue1
Joram Server Joram Server
48
22
18/05/2014
17/05/2014
JORAM (ObjectWeb & Scalagent)
Architecture Multi-Serveurs
Equilibrage de la charge telle que perçue par clients
U U U U
MOM & JMS, Didier Donsez, 1998-2012
Queue1 Queue1
replica1
replica2
17/05/2014
JORAM (ObjectWeb & Scalagent)
Architecture Multi-Serveurs
Haute disponibilité (1)
Prod Cons
Q1 Q1
CF CF
MOM & JMS, Didier Donsez, 1998-2012
U U U U
JGroup
Queue1 Queue1
replica1
Joram Server replica2
Joram
SlaveServer Joram Server
Slave Master
50
23
18/05/2014
17/05/2014
JORAM (ObjectWeb & Scalagent)
Architecture Multi-Serveurs
Haute disponibilité (2)
Prod Cons
Q1 Q1
CF CF
U U U U
JGroup
MOM & JMS, Didier Donsez, 1998-2012
Queue1 Queue1
replica1
Joram Server replica2
Joram
SlaveServer Joram Server
Slave Master
51
17/05/2014
MOM et Composants
Motivations
Fournir la couche de communication pour le paradigme
Événement (=message/event reçu en asynchrone) dans des
modèles à composants (qui le supportent)
Modèles
CORBA CCM (Corba Component Model)
.NET Asynchronous [OneWay] calls
55
24
18/05/2014
17/05/2014
Bibliographie
Gregor Hohpe, Enterprise Integration
Patterns,[Link]
Très bon livre traitant de l’utilisation des MOMs
[Link]
Site intéressant
MOM & JMS, Didier Donsez, 1998-2012
56
25
18/05/2014
Lieu de la séance de TP
d’aujourd’hui
Pour chacun des 2 groupes:
10h15-12h15
13h30-15h30
Colocation Center (CLC) du Nœud Sophia-Antipolis satellite du Nœud
Paris EIT ICTLabs,
Batiment FORUM (au dessus du futur Learning center)
Parce que j’ai besoin de faire des photos d’étudiants utilisant le CLC, pour le site web
En vue de l’Inauguration Officielle le 28 mai 2014
UNS est membre affilié, au même titre que Eurecom. INRIA est core member, au
Innovation (cadre du Doctoral Supporting innovators all the way to the market
Training Center à venir)
Business Developers ICTLabs
à votre disposition
26