MOM - of Louis

Transcription

MOM - of Louis
Systèmes Distribués
Message-Oriented Middleware
Louis-Claude Canon
[email protected]
Bureau 429C
Master 2 informatique – Semestre 9
Louis-Claude Canon
SD – Message-Oriented Middleware
1 / 66
Plan
Introduction
JMS 2.0
AMQP
ZeroMQ
Perspectives et bibliographie
Louis-Claude Canon
SD – Message-Oriented Middleware
2 / 66
Introduction
Plan
Introduction
JMS 2.0
AMQP
ZeroMQ
Perspectives et bibliographie
Louis-Claude Canon
SD – Message-Oriented Middleware
3 / 66
Introduction
Principe de la communication indirecte
I
Les échanges se font par l’intermédiaire d’une structure spécifique : un
port, 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 / 66
Introduction
Intergiciel (middleware)
I
Couche logicielle intermédiaire située entre l’application et le système
d’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 / 66
Introduction
Services additionnels des MOM
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
6 / 66
Introduction
Contexte applicatif
I
I
Application de type workflow (gestion de flux) : des
documents/informations/tâches sont transmis de participant en
participant suivant une procédure donnée.
Exemple : application web gérant la commande d’un client.
I
I
I
Stocker la commande dans un système géré par un tiers (audit).
Envoyer un mail de confirmation au client.
Transmettre les informations liées à la commande au système
d’expédition.
Louis-Claude Canon
SD – Message-Oriented Middleware
7 / 66
JMS 2.0
Plan
Introduction
JMS 2.0
AMQP
ZeroMQ
Perspectives et bibliographie
Louis-Claude Canon
SD – Message-Oriented Middleware
9 / 66
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
10 / 66
JMS 2.0
Styles de communication
I
Communication point-à-point :
I
I
I
I
Les messages transitent par une file (queue).
Chaque message n’a qu’un seul consommateur.
Le récepteur peut consommer le message même s’il était hors-ligne
lorsque ce dernier a été émis.
Communication publication/souscription (publish/subscribe) :
I
I
I
Les messages transitent par un sujet (topic).
Chaque message peut avoir plusieurs consommateurs.
Un client qui a souscrit à un sujet ne peut consommer que les messages
émis après la souscription.
Louis-Claude Canon
SD – Message-Oriented Middleware
12 / 66
JMS 2.0
Consommation des messages
I
Synchrone : un consommateur peut explicitement recevoir un message
de la destination avec la méthode bloquante receive.
I
Asynchrone : une application peut enregistrer un listener avec un
consommateur. Lorsqu’un message sera reçu, la méthode onMessage
sera appelée.
Louis-Claude Canon
SD – Message-Oriented Middleware
15 / 66
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
16 / 66
JMS 2.0
Objets administrés
Connection factories
I
Permet de créer une connexion auprès d’un fournisseur.
I
Injection JNDI.
1
2
@ R e s o u r c e ( lookup = " java : comp / D e f a u l t J M S C o n n e c t i o n F a c t o r y " )
private static C o n n e c t i o n F a c t o r y c o n n e c t i o n F a c t o r y ;
Destinations
I
1
2
3
4
5
Représente soit des files, soit des sujets.
@ R e s o u r c e ( lookup = " jms / MyQueue " )
private static Queue queue ;
@ R e s o u r c e ( lookup = " jms / MyTopic " )
private static Topic topic ;
Louis-Claude Canon
SD – Message-Oriented Middleware
18 / 66
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 de
grouper les échanges au sein d’une transaction.
Louis-Claude Canon
SD – Message-Oriented Middleware
19 / 66
JMS 2.0
JMSContext
1
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.
J M S C o n t e x t context = c o n n e c t i o n F a c t o r y . c r e a t e C o n t e x t ( ) ;
Louis-Claude Canon
SD – Message-Oriented Middleware
20 / 66
JMS 2.0
JMSProducer
1
I
Nécessaire pour l’envoi d’un message.
I
Objet léger, peut être recréé à chaque utilisation.
context . c r e a t e P r o d u c e r ( ) . send ( dest , message ) ;
Louis-Claude Canon
SD – Message-Oriented Middleware
21 / 66
JMS 2.0
JMSConsumer et réception synchrone
1
2
I
Nécessaire pour la réception d’un message.
I
Possibilité de donner une échéance en argument.
J M S C o n s u m e r c o n s u m e r = context . c r e a t e C o n s u m e r ( dest ) ;
Message m = c o n s u m e r . receive ( ) ;
Louis-Claude Canon
SD – Message-Oriented Middleware
22 / 66
JMS 2.0
JMSConsumer et réception asynchrone
1
2
I
Un listener doit implémenter l’interface MessageListener qui
contient une méthode, onMessage.
I
La méthode onMessage est invoquée à la réception de chaque
message.
L i s t e n e r m y L i s t e n e r = new L i s t e n e r ( ) ;
consumer . setMessageListener ( myListener ) ;
Louis-Claude Canon
SD – Message-Oriented Middleware
23 / 66
JMS 2.0
JMSConsumer et sélecteur de messages
1
2
3
4
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 . c r e a t e T e x t M e s s a g e ( ) ;
message . s e t S t r i n g P r o p e r t y ( " NewsType " , " Sports " ) ;
String sel = " NewsType ␣ = ␣ ’ Sports ’␣ OR ␣ NewsType ␣ = ␣ ’ Opinion ’" ;
J M S C o n s u m e r c o n s u m e r = context . c r e a t e C o n s u m e r ( sel ) ;
Louis-Claude Canon
SD – Message-Oriented Middleware
24 / 66
JMS 2.0
JMSConsumer et sujet
1
I
Pas de différence avec les files.
I
Tous les messages reçus lors d’une déconnexion sont perdus.
J M S C o n s u m e r c o n s u m e r = context . c r e a t e C o n s u m e r ( ) ;
Louis-Claude Canon
SD – Message-Oriented Middleware
25 / 66
JMS 2.0
JMSConsumer et sujet durable
1
2
3
4
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 " ;
J M S C o n s u m e r c o n s u m e r = context . c r e a t e D u r a b l e C o n s u m e r ( dest ,
subName ) ;
c o n s u m e r . close ( ) ;
context . u n s u b s c r i b e ( subName ) ;
Louis-Claude Canon
SD – Message-Oriented Middleware
27 / 66
JMS 2.0
JMSConsumer et sujet partagé
I
1
2
Les messages seront répartis entre les ceux qui ont participé à
l’inscription.
String subName = " MySub " ;
J M S C o n s u m e r c o n s u m e r = context . c r e a t e S h a r e d C o n s u m e r ( dest ,
subName ) ;
Louis-Claude Canon
SD – Message-Oriented Middleware
29 / 66
JMS 2.0
Messages JMS
Contient trois parties :
I
L’en-tête (ensemble de champs possédant des valeurs déterminés par le
client ou le fournisseur).
I
Les propriétés (champs spécifiés par l’application et servant aux
sélecteurs).
I
Le corps (6 types différents).
Louis-Claude Canon
SD – Message-Oriented Middleware
30 / 66
JMS 2.0
En-tête des messages JMS
Champ
Description
Défini par
JMSDestination
JMSPriority
JMSMessageID
Destination du message.
Priorité du message.
Identifiant du message.
La date de réception du message par
le fournisseur.
L’identifiant du message relatif.
Destination à utiliser pour la réponse.
fournisseur
fournisseur
fournisseur
JMSTimestamp
JMSCorrelationID
JMSReplyTo
...
Louis-Claude Canon
SD – Message-Oriented Middleware
fournisseur
application
application
31 / 66
JMS 2.0
Corps des messages JMS
Type
Description
TextMessage
MapMessage
BytesMessage
StreamMessage
ObjectMessage
Message
Une chaîne de caractères.
Un ensemble de paires clé-valeur.
Un flot de données binaires.
Un flot de données primitives.
Un objet sérialisé.
Ne contient rien.
Louis-Claude Canon
SD – Message-Oriented Middleware
32 / 66
JMS 2.0
Exceptions JMS
1
2
3
4
I l l e g a l S t a t e E x c e p t i o n // f i l e c r é é e s u r un T o p i c S e s s i o n
I n v a l i d D e s t i n a t i o n E x c e p t i o n // m a u v a i s e d e s t i n a t i o n
I n v a l i d S e l e c t o r E x c e p t i o n // p r o b l ème de s y n t a x e du s é l e c t e u r
...
Louis-Claude Canon
SD – Message-Oriented Middleware
33 / 66
JMS 2.0
Exemple d’échange d’une chaîne de caractères
1
2
3
T e x t M e s s a g e message = context . c r e a t e T e x t M e s s a g e ( ) ;
message . setText ( m s g _ t e x t ) ;
// msg_text i s a S t r i n g
context . c r e a t e P r o d u c e r ( ) . send ( message ) ;
1
2
3
4
5
6
7
Message m = c o n s u m e r . receive ( ) ;
if ( m instanceof T e x t M e s s a g e ) {
String message = m . getBody ( String . class ) ;
System . out . println ( " Reading ␣ message : ␣ " + message ) ;
} else {
// H a n d l e e r r o r o r p r o c e s s a n o t h e r m e s s a g e t y p e
}
Louis-Claude Canon
SD – Message-Oriented Middleware
35 / 66
JMS 2.0
Exemple simplifié
1
2
String message = " This ␣ is ␣ a ␣ message " ;
context . c r e a t e P r o d u c e r ( ) . send ( dest , message ) ;
1
String message = r e c e i v e r . r e c e i v e B o d y ( String . class ) ;
Louis-Claude Canon
SD – Message-Oriented Middleware
36 / 66
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 transmis
paresseusement (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
37 / 66
JMS 2.0
Transaction
I
Permet de grouper l’envoi et la réception de messages en les terminant
par l’appel de la méthode commit. Exemples :
I
I
Un client envoie deux messages mais ne souhaite pas qu’en cas de
défaillance (du client), seul le premier ne soit reçu par le fournisseur.
Un client reçoit deux messages mais ne souhaite pas qu’en cas de
défaillance (du client), seul le premier ne 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
38 / 66
JMS 2.0
Persistance
I
Les messages peuvent être persistants ou non. Seul un message
persistant survit à la défaillance du fournisseur.
I
La durabilité est une propriété liée au souscripteur alors que la
persistance est une propriété liée au fournisseur.
Louis-Claude Canon
SD – Message-Oriented Middleware
39 / 66
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
40 / 66
JMS 2.0
Envoi d’un message (JMS 1.1)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public void s e n d M e s s a g e J M S 1 1 ( C o n n e c t i o n F a c t o r y connFactory ,
Queue queue , String text ) {
try {
C o n n e c t i o n conn = c o n n F a c t o r y . c r e a t e C o n n e c t i o n ( ) ;
try {
Session session = conn . c r e a t e S e s s i o n ( false ,
Session . A U T O _ A C K N O W L E D G E ) ;
MessageProducer msgProducer
= session . c r e a t e P r o d u c e r ( queue ) ;
T e x t M e s s a g e textMsg = session . c r e a t e T e x t M e s s a g e ( text ) ;
m s g P r o d u c e r . send ( textMsg ) ;
} finally {
conn . close ( ) ;
}
} catch ( J M S E x c e p t i o n ex ) {
// h a n d l e e x c e p t i o n ( d e t a i l s o m i t t e d )
}
}
Louis-Claude Canon
SD – Message-Oriented Middleware
41 / 66
JMS 2.0
Réception d’un message (JMS 1.1)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public String r c v M e s s a g e J M S 1 1 ( C o n n e c t i o n F a c t o r y connFactory ,
Queue queue ) {
String body = null ;
try {
C o n n e c t i o n conn = c o n n F a c t o r y . c r e a t e C o n n e c t i o n ( ) ;
try {
Session session = conn . c r e a t e S e s s i o n ( false ,
Session . A U T O _ A C K N O W L E D G E ) ;
MessageConsumer msgConsumer
= session . c r e a t e C o n s u m e r ( queue ) ;
conn . start ( ) ;
T e x t M e s s a g e textMsg
= ( T e x t M e s s a g e ) m s g C o n s u m e r . receive ( ) ;
body = textMsg . getText ( ) ;
} finally {
conn . close ( ) ;
}
} catch ( J M S E x c e p t i o n ex ) {
// h a n d l e e x c e p t i o n ( d e t a i l s o m i t t e d )
}
return body ;
}
Louis-Claude Canon
SD – Message-Oriented Middleware
42 / 66
JMS 2.0
Création de session
JMS 1.1 :
1
2
3
4
5
Session c r e a t e S e s s i o n ( boolean transacted ,
int a c k n o w l e d g e M o d e )
throws J M S E x c e p t i o n ;
// S e s s i o n .AUTO_ACKNOWLEDGE, S e s s i o n . CLIENT_ACKNOWLEDGE ou
// S e s s i o n .DUPS_OK_ACKNOWLEDGE
JMS 2.0 :
1
2
3
4
5
Session c r e a t e C o n t e x t ( int s e s s i o n M o d e ) throws J M S E x c e p t i o n ;
// S e s s i o n .AUTO_ACKNOWLEDGE, S e s s i o n . CLIENT_ACKNOWLEDGE,
// S e s s i o n .DUPS_OK_ACKNOWLEDGE ou S e s s i o n . TRANSACTED
Session c r e a t e C o n t e x t ( ) throws J M S E x c e p t i o n ;
Louis-Claude Canon
SD – Message-Oriented Middleware
43 / 66
JMS 2.0
Délai de délivrance
JMS 1.1 :
1
2
3
4
5
6
7
8
try ( C o n n e c t i o n conn = c o n n F a c t o r y . c r e a t e C o n n e c t i o n ( ) ) {
Session session = conn . c r e a t e S e s s i o n ( ) ;
MessageProducer msgProducer
= session . c r e a t e P r o d u c e r ( queue ) ;
msgProducer . setDeliveryDelay (20000) ;
T e x t M e s s a g e textMsg = session . c r e a t e T e x t M e s s a g e ( " Hello " ) ;
m s g P r o d u c e r . send ( textMsg ) ;
}
JMS 2.0 :
1
2
3
4
5
try ( J M S C o n t e x t context = c o n n F a c t o r y . c r e a t e C o n t e x t ( ) ) {
context . c r e a t e P r o d u c e r ( )
. setDeliveryDelay (20000)
. send ( queue , " Hello ␣ world " ) ;
}
Louis-Claude Canon
SD – Message-Oriented Middleware
44 / 66
JMS 2.0
Caractéristiques clés de JMS
I
Couplage faible entre les participants (ils n’ont pas tous besoin d’être
connecté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
45 / 66
AMQP
Plan
Introduction
JMS 2.0
AMQP
ZeroMQ
Perspectives et bibliographie
Louis-Claude Canon
SD – Message-Oriented Middleware
46 / 66
AMQP
JMS et AMQP
AMQP
Protocole 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.
JMS
Interface 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
47 / 66
AMQP
File
Même fonctionnement pour les files qu’avec JMS :
Louis-Claude Canon
SD – Message-Oriented Middleware
48 / 66
AMQP
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
49 / 66
AMQP
Types d’exchanges
Trois types : fanout (équivalent des topics JMS), direct (topics avec filtres)
et topic (topics avec filtres avancés).
Louis-Claude Canon
SD – Message-Oriented Middleware
50 / 66
AMQP
RPC
Réaliser une invocation à distance avec une file :
Avantages
I
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
51 / 66
AMQP
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 et
d’exchanges.
Connection Socket TCP/IP après authentification (Connection).
Channel Lien gérant les échanges spécifiques à chaque thread
(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
52 / 66
ZeroMQ
Plan
Introduction
JMS 2.0
AMQP
ZeroMQ
Perspectives et bibliographie
Louis-Claude Canon
SD – Message-Oriented Middleware
53 / 66
ZeroMQ
Particularités
I
I
Communication directe et indirecte : on manipule des sockets, mais on
peut facilement simuler un fournisseur.
Bilan des solutions lors du développement d’une application distribuée :
I
I
I
I
I
La laisser centralisée (ne passe pas à l’échelle).
La distribuer en utilisant directement des sockets TCP/IP (bas niveau,
nécessité de réimplémenter de nombreuses fonctionnalités).
Stocker les données dans des bases de données (inadapté pour des
échanges dynamiques).
Utiliser un fournisseur JMS ou AMQP (coût d’administration).
Objectif : fournir une solution haut-niveau pour les projets modestes
avec un coût de performance et d’administration minimal.
I
I
I
Couplage faible (les machines peuvent se connecter après l’envoi d’un
message).
Schémas de communication (multicast).
Sans fournisseur.
Louis-Claude Canon
SD – Message-Oriented Middleware
54 / 66
Perspectives et bibliographie
Plan
Introduction
JMS 2.0
AMQP
ZeroMQ
Perspectives et bibliographie
Louis-Claude Canon
SD – Message-Oriented Middleware
55 / 66
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).
I
JMS 2.1 inclus dans Java EE 8 (2016).
Louis-Claude Canon
SD – Message-Oriented Middleware
56 / 66
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 suite à une décision 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
57 / 66
Perspectives et bibliographie
Historique d’AMPQ
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
58 / 66
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
59 / 66
Perspectives et bibliographie
Historique récapitulatif
2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014
JMS
1.0 1.1
• •
2.0
•
0-8 0-9
AMQP • •
0-9-1
•
•
0-10
ZeroMQ •
0.3
•
1.0
•
1.0
ZMTP/1.0 2.0 3.0 3.1
• ••
• • • •
2.0 3.0
4.0
2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014
Louis-Claude Canon
SD – Message-Oriented Middleware
60 / 66
Perspectives et bibliographie
Récapitulatif sur les implémentations
Standard/vendeur
Implémentation principale
IBM
TIBCO
JMS 1.1
JMS 2.0
AMQP 0-9-1
AMQP 0-10/1.0
ZMTP
WebSphere MQ
Enterprise Message Service
Apache ActiveMQ
Apache ActiveMQ Artemis
RabbitMQ
Apache QPid
ZeroMQ
Et aussi Sparrow, Starling, Kestrel, Beanstalkd, SQS, Apache Kafka,
EagleMQ, IronMQ, . . .
Louis-Claude Canon
SD – Message-Oriented Middleware
61 / 66
Perspectives et bibliographie
Documentation officielle
I
Documentation de l’interface JMS 2.0
I
Spécification JMS 2.0
I
Tutoriel sur les concepts
I
Tutoriel sur les exemples
Louis-Claude Canon
SD – Message-Oriented Middleware
62 / 66
Perspectives et bibliographie
Java Message Service, seconde édition, 2009
N’aborde pas la version 2.0.
Louis-Claude Canon
SD – Message-Oriented Middleware
63 / 66
Perspectives et bibliographie
RabbitMQ in Action, 2012
Spécifique à l’implémentation
dominante du protocole, AMQP
0-9-1. Assez complémentaire avec la
documention en ligne.
Louis-Claude Canon
SD – Message-Oriented Middleware
64 / 66
Perspectives et bibliographie
ZeroMQ, 2013
Reprend essentiellement le guide
ZeroMQ accessible en ligne.
Louis-Claude Canon
SD – Message-Oriented Middleware
65 / 66
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 Cases
I
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
66 / 66

Documents pareils