Documente Academic
Documente Profesional
Documente Cultură
Annick Fron
ESSI
Printemps 2004
Plan
Introduction la communication par messages
Communication point point
Communication publish/subscribe
Filtrage de messages
Conclusion
C
D
B
E
Cf mail
listes de diffusion
Rcepteur
Rcepteur
Rcepteur
Message
Destination 1
Destination 2
= intermdiaire
Persistance
ESSI - Printemps 2004
Ventes
Livraison
commandes
Facturation
Comptabilit
factures
Courtier en bourse
Courtier en bourse
Courtier en bourse
Courtier en bourse
Rles du message
Message = contenu + contrle
Echange d'information (contenu)
Synchronisation/ coordination
10
11
12
Synchrone/asynchrone
Synchrone
Asynchrone
13
1. dcroche
1. raccroche
2. raccroche
2. dcroche
Serveur
$$$$ ???
14
Serveur
Retrait 200$
!Conn. timeout
Retrait 200$
15
16
17
18
Architecture JMS
Client JMS
Connection
Client JMS
Connection
Session
Session
Producer
Consumer
Message Server
message
Destination
message
19
Architecture JMS
Emboitement d'abstractions : une session existe l'intrieur
d'une connexion
La connexion est lie au serveur de message
Il peut y avoir plusieurs sessions par connexion
La session assure la qualit de service (gestion des erreurs,
transactions ...) : gre le processus global de transmission de
bout en bout, srialise les messages selon priorit
Le consumer/producer n'existe qu' l'intrieur d'une session
et connait la destination
Le message n'existe qu' l'intrieur d'une session
ESSI - Printemps 2004
20
JMS - causalit
JNDI
Destination
JMS Client
ConnectionFactory
MessageProducer
Connection
MessageConsummer
Session
ESSI - Printemps 2004
21
Point de dpart
2 points de dpart :
1) La ConnectionFactory -> Connection -> Session
2) La Destination
22
Destinations
2 types de destinations :
Queues pour le point point
Topics pour publish/subscribe
23
Le consommateur envoie un
reu
24
Publish/subscribe : Topic
Similaire un modle par vnements
(ex : Listener d'une interface
graphique)
Plusieurs consommateurs sur
abonnement
25
26
JMS - "Point-to-Point"
Emetteur
Messaging
QueueConnectionFac
Destinataire
tory
Queue
27
JMS - "Point-to-Point"
Emetteur
Destinataire
Serveur
QueueConnectionFactory
Queue
QueueConnection
QueueConnection
QueueSession
QueueSession
Queue
La Queue est un objet ''administr''
Il doit avoir t cr par l'administrateur systme sur le
serveur
On peut soit le retrouver dans JNDI :
Queue queue = (Queue) context.lookup("");
29
JMS - "Point-to-Point"
Emetteur
Server
QueueConnectionFactory
Destinataire
Queue
QueueConnection
QueueConnection
QueueSession
QueueSession
+
QueueSender
QueueSender sender = session.createSender(queue);
30
JMS - "Point-to-Point"
Emetteur
Destinataire
Messaging
QueueConnectionFac
tory
Queue
QueueConnection
QueueConnection
QueueSession
QueueSession
+
QueueReceiver
QueueSender
31
Rcepteur/metteur
La cration de session est identique ct rcepteur et ct
metteur
Une mme session peut utiliser la fois des metteurs et des
rcepteurs, sur des queues identiques ou diffrentes
32
Connection start()
Lorque l'on cre connexion, elle est l'tat dormant.
Afin de pouvoir la lancer uniquement lorsque tous les acteurs
sont prsents, on utilise le start()
Le start() est ABSOLUMENT ncessaire pour activer la
rception de messages
33
JMS - "Point-to-Point"
Emetteur
Destinataire
Messaging
QueueConnectionFac
tory
Queue
QueueConnection
QueueConnection
QueueSession
QueueSession
send
+
QueueReceiver
QueueSender
TextMessage msg = session.createTextMessage();
msg.setText("");
sender.send(msg);
ESSI - Printemps 2004
34
Send
Le message est cr DANS LA SESSION
L'envoi par send dpend de la smantique du serveur
On prcise la smantique avec les paramtres :
sender.send(mess, \\le message
DeliveryMode.PERSISTENT, \\ stock sur serveur
Message.DEFAULT_PRIORITY, \\priorit dfaut
60 000) \\dure de vie 60 000 ms = 1 minute
35
Message
Destination
ie
o
v
n
e
36
Types de messages
Il existe plusieurs types de messages :
BytesMessage : binaire
MapMessage : fichier de proprits (paires attribut/valeur)
ObjectMessage : object java srialis
StreamMessage : une Stream de types primitifs
TextMessage : une String
setText(String);
getText()
37
JMS - "Point-to-Point"
Emetteur
Destinataire
Messaging
QueueConnectionFac
tory
Queue
QueueConnection
QueueConnection
QueueSession
QueueSession
send
+
receive
QueueReceiver
QueueSender
38
Message
Cr par session, et envoy par le sender (ct serveur)
TextMessage msg = session.createTextMessage();
msg.setText("");
sender.send(msg);
39
PtoP synchrone
On peut recevoir autant de messages que comporte la Queue
connection.start();
Message m = consumer.receive();
Message m = consumer.receive(1000);
// time out aprs 1 seconde ou 1000 ms
Message m = consumer.receiveNoWait();
40
41
En rsum
42
Mode publish/subscribe
43
JMS - "Publish/Subscribe"
Emetteur
Destinataire
TopicConnectionFactory
Topic
A
x
B
y
44
JMS - "Publish/Subscribe"
Emetteur
Destinataire
TopicConnectionFactory
Topic
TopicConnection
A
TopicSession
TopicConnection
B
TopicSession
TopicConnectionFactory connectionFactory =
(TopicConnectionFactory) jndiContext.lookup("");
Topic topic = (Topic) jndiContext.lookup("/A/x");
TopicConnection connection = connectionFactory.createTopicConnectio();
TopicSession session =
connection.createTopicSession(false, Session.CLIENT_ACKNOWLEDGE);
ESSI - Printemps 2004
45
Topic
Comme pour la Queue, ils peuvent tre soit dans JNDI soit
crs par la session
A la diffrence des Queues, ce ne sont pas des objets
administrs, on peut crer un Topic la vole dans
intervention de l'administrateur
Les Topics peuvent tre hirarchiques, et on peut utiliser des
expressions rgulires
46
Topic
L'abonnement publish/subscribe s'appuie sur une
arborescence de topics
/Sport/Tennis/* (notation Websphere MQ)
Sport.Tennis.* (notation SonicMQ)
47
JMS - "Publish/Subscribe"
Emetteur
Messaging
TopicConnectionFact
Destinataire
ory
Topic
TopicConnection
A
x
TopicSession
TopicConnection
B
TopicSession
+
TopicPublisher
TopicPublisher publisher = session.createPublisher(topic);
48
JMS - "Publish/Subscribe"
Emetteur
Destinataire
Messaging
TopicConnectionFact
ory
Topic
TopicConnection
A
x
TopicSession
TopicConnection
B
TopicSession
+
TopicSubscriber
TopicPublisher
Listener
TopicSubscriber subscriber =
session.createSubscriber(topic);
subscriber.setMessageListener(listener);
ESSI - Printemps 2004
49
JMS - "Publish/Subscribe"
Emetteur
Destinataire
Messaging
TopicConnectionFact
ory
Topic
TopicConnection
A
x
TopicSession
publish
TopicConnection
B
TopicSession
+
TopicSubscriber
TopicPublisher
Listener
publisher.publish(msg);
50
JMS - "Publish/Subscribe
Emetteur
Destinataire
Messaging
TopicConnectionFact
ory
Topic
TopicConnection
A
x
TopicSession
publish
TopicConnection
B
TopicSession
+
TopicSubscriber
TopicPublisher
void onMessage(Message msg) throws JMSException {
// unpack and handle the message
}
ESSI - Printemps 2004
Listener
onMessag
e
51
Synchrone/asynchrone
Mode diffusion
Mode rception
PtoP
Pub sub
Synchrone
receive
receive
Asynchrone
Onmessage
onmessage
52
PtoP
Pubsub
ConnectionFactory QueueConnectionFactory
TopicConnectionFactory
Connection
QueueConnection
TopicConnection
Destination
Queue
Topic
Session
QueueSession
TopicSession
MessageProducer QueueSender
TopicPublisher
MessageConsumer QueueReceiver
TopicSubscriber
53
MessageConsumer
QueueReceiver
TopicSubscriber
54
Aperu du parallle
55
56
Filtrage de messages
Filtre
Prop = 'green'
Prop = 'blue'
Prop = 'yellow'
57
Ct rcepteur
queueReceiver = session.createReceiver(ioQueue,
"myProp = 'blue'");
58
59
60
Conclusions
JMS permet une communication par messages
Un message est non structur mais peut tre de plusieurs
types (texte, binaire)
2 modes de diffusion : point point (queues),
publish/subscribe (topics)
2 modes de rception : synchrone (receive), asynchrone
(listener>onMessage)
On peut combiner les deux modes de diffusion et les deux
modes de rception
On peut filtrer les messages sur des proprits
ESSI - Printemps 2004
61
Quelques rfrences...
Websphere MQ (ex MQSeries) d'IBM : http://www3.ibm.com/software/ts/mqseries/messaging/
Sonic MQ : http://www.sonicsoftware.com/products/sonicmq/index.ssp
Joram http://www.objectweb.org/joram (Open Source)
Tibco :
http://www.tibco.com/services/education/wbt_demo/wbt112/unit1/main.htm
l
Swift MQ : http://www.swiftmq.com/
JMS Tutorial : http://java.sun.com/products/jms/tutorial/index.html
Message-driven bean : http://java.sun.com/j2ee/tutorial/1_3fcs/doc/EJBConcepts5.html
http://www.afceurope.com/JMS.html
62