View
4
Download
0
Category
Preview:
Citation preview
PlanIntroduction
JMS
Communication par messages
Michel Riveill
Université de Nice - Sophia Antipolis
3 octobre 2008
Michel Riveill Communication par messages
PlanIntroduction
JMS
IntroductionGénéralitésCommunication par échange de messages
JMSGénéralitésMessages JMSMessages persistantsTransactionsExemple
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésCommunication par échange de messages
Rappel sur les intentions
I Dans le modèle Client-Serveur, le serveur est prédominantI On ne souhaite pas être bloqué pendant une communication
(asynchronisme)I On ne connaît pas toujours ceux avec qui on communique
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésCommunication par échange de messages
On connait déjà ce modèle
I Communication par message au niveau socket :communication udp et multicast
I Connexions faibles entre objets : le design Pattern ObserverObservable
I Programmation Java : utilisation des listenersI Corba : le service d’événements
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésCommunication par échange de messages
Communication par socket : datagramme
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésCommunication par échange de messages
Communication par socket : multicast
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésCommunication par échange de messages
Pattern Oberver-Observable
I Un effet de bord fréquent de la partition d’un système en unecollection de classes coopérantes est la nécessité de maintenirla consistance entre les objets reliés entre eux.
I On ne veut pas obtenir la consistance en liant étroitement lesclasses, parce que cela aurait comme effet de réduire leurréutilisabilité.
I Moyen : définir une dépendance de ’1’ à ’n’ entre des objetstelle que lorsque l’état d’un objet change, tous ses dépendantssont informés et mis à jour automatiquement
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésCommunication par échange de messages
Pattern Oberver-Observable
Quand l’appliquerI Lorsqu’une abstraction possède deux aspects dont l’un dépend
de l’autre. L’encapsulation de ces aspects dans des objetsséparés permet de les varier et de les réutiliserindépendemment (Modèle-Vue-Contrôleur).
I Lorsqu’une modification à un objet exige la modification desautres, et que l’on ne sait pas a priori combien d’objetsdevront être modifiés.
I Lorsqu’un objet devrait être capable d’informer les autresobjets sans faire d’hypothèses sur ce que sont ces objets,
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésCommunication par échange de messages
Pattern Oberver-Observable
I Le pattern ’Observer’ décrit comment établir les relations entreles objets dépendants
Les objets-clés sontI la source : peut avoir n’importe quel nombre d’observateurs
dépendants, tous les observateurs sont informés lorsque l’étatde la source change
I l’observateur : chaque observateur demande à la source sonétat afin de se synchroniser
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésCommunication par échange de messages
Pattern Oberver-Observable
BénéficesI Utilisation indépendante des sources et des observateurs.
I On peut réutiliser les sources sans réutiliser les observateurs etvice-versa.
I On peut ajouter des observateurs sans modifier la source et lesautres observateurs.
I Support pour la communication ’broadcast’ : la source ne sepréoccupe pas du nombre d’observateurs.
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésCommunication par échange de messages
Listener Java
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésCommunication par échange de messages
La communication par échange de messages
Deux modèles de communication :I communication point-à-point basée sur une queue de messages
(1 vers 1). Il peut y avoir plusieurs émetteurs et plusieursrécepteurs.
I publish-subscribe (1 vers n). Il peut y avoir plusieurs"publishers".
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésCommunication par échange de messages
Exemple d’utilisation du modèle point à point
I Une queue pour stocker les commandes d’une entreprise,I Les représentants de l’entreprise envoient des commandes dans
cette queue,I Les unités de fabrication prélèvent des commandes dans cette
queue pour exécution
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésCommunication par échange de messages
Communication point à point (PTP)
I l’émetteur envoie son message dans une queueI le destinataire prélève un message dans une queue, chaque
message n’est reçu que par un seul destinataire, les messagessont prélevs selon l’ordre FIFO
I les messages peuvent être persistants ou non persistants, seulun message persistant survit à la défaillance du serveur quigère la queue
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésCommunication par échange de messages
Communication point à point (PTP)
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésCommunication par échange de messages
Exemple d’utilisation du modèle publish/subscribe
I Bourse : les sujets (topics) correspondent aux différentesentreprises cotées,
I La bourse publie régulièrement une mise à jour des cours desdifférentes entreprises,
I Un client intéressé au cours des actions IBM, souscrit à cesujet. Un sujet correspond ici à une entreprise X, et lesmessages publiés aux différents cours de l’action de l’entrepriseX.
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésCommunication par échange de messages
Modèle publish/subscribe
I le “publisher” adresse son message à un sujet (topic)I un souscripteur souscrit à un sujetI un message peut être reçu par de multiples destinataires, les
différents souscripteursI un souscripteur qui souscrit à l’instant t, ne reçoit que les
messages pubiés après tI pour recevoir les messages le souscripteur doit être actif, la
souscription durable permet à un souscripteur de recevoir lesmessages publis pendant les périodes ou le souscripteur n’estpas actif
I les messages peuvent être persistants ou non persistants, seulun message persistant survit à la défaillance du serveur quigère le sujet
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésCommunication par échange de messages
Remarque : la durabilité est une propriété liée au souscripteur alorsque la persistance est une propriété liée au message(éventuellement au serveur qui gère le sujet)
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésCommunication par échange de messages
Modèle publish/subscribe
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésCommunication par échange de messages
Réception synchrone ou asynchrone des messages
I réception synchrone : le destinataire (modèle PTP) ou lesouscripteur (modèle pub/sub) appelle la méthode receive ().L’appel est bloquant jusqu’à ce qu’un message soit obtenu. Ilest possible de spécifier un timeout.
I réception asynchrone : le destinataire ou le souscripteur peutenregistrer dans un objet de type listener la méthodeonMessage () à exécuter lors de la réception d’un message.
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
JMS
I JMS = Java Messaging ServiceI JMS est une API Java proposée par Sun, permettant aux
applications réparties de créer, envoyer, recevoir et lire desmessages
I première specification publiée en 1998I un fournisseur JMS (JMS provider) est un système qui
implémente les interfaces JMS (et offre des outilsd’administration)
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
Remarques :I JMS permet un couplage faible entre entités réparties (les
différentes entités n’ont pas besoin d’être activessimultanément)
I Par comparaison RMI, CORBA : couplage fort entre entitésréparties (les différentes entités doivent être activessimultanément)
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
JMS est une API
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
Références
I R. Monson-Haefel, D.A. Chappell Java Message ServiceO’Reilly, 2001
I P. Giotta et al. Professional JMS Programming Wrox Press,2000
I http ://java.sun.com/products/jms/tutorial/
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
Modèles de communication
JMS offre les deux modèles de communication usuel :I communication point-à-point basé sur une queue de messages
(1 vers 1). Il peut y avoir plusieurs émetteurs et plusieursrécepteurs.
I publish-subscribe (1 vers n). Il peut y avoir plusieurs"publishers".
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
JMS point à point
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
JMS point à point
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
Client et serveur JMS
I client JMS : programme ou composant écrit en Java quienvoie ou reçoit des messages
I serveur JMS : composant qui permet à des clients JMS decommuniquer entre eux
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
Messages JMS
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
En-tête
I utilisé pour l’identification et le routageI inclues : JMSDestination, JMSDeliveryMode, JMSMessageID,
JMSTimeStamp, JMSExpiration, JMSReplyTo
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
Propriétés
I décrivent les propriétés liées à l’application, au système demessagerie, optionnelles associées aux messages
I une propriété est un couple nom / valeur
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
Corps
I contient le corps du message, lut séquentiellementI byte[], String, Object
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
Messages persistants
I Les messages persistants sont conservés par le serveur JMS surdisque. Ils survivent ainsi à une défaillance du serveur JMS
I Dans le cas de message persistants, le protocole entre le clientJMS et le serveur JMS inclus un message d’acquittement.
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
Envoi de messages persistants
I la méthode appelée par le client ne se termine que lorsque lemessage est stocké sur le disque
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
Réception de messages persistants
I le message est supprimé du disque que lorsque le serveur JMSa reçu un acquitement de la part du client JMS
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
Accusé de réception
I Mode AUTO_ACKNOWLEDGE : ACK envoyéautomatiquement soit à la fin de la méthode receive()(réception synchrone), soit à la fin de la méthode onMessage()(réception asynchrone).
I Mode CLIENT_ACKNOWLEDGE : le récepteur contrôlel’envoie du ACK en appelant la méthodemessage.acknowledge().
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
Perte du message ACK
I Si le serveur JMS tombe en panne, le message reçu par leclient JMS n’est pas nécessairement effacé du disque.
I Dans ce cas, lorsque le serveur JMS redémarre, il cherchera àrenvoyer le même message.
I Il peut être souhaitable d’éviter qu’un même message ne soitreçu plus d’une fois par l’application.
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
Perte du message ACK
I mode AUTO_ACKNOWLEDGE : une table des ID demessages reçus est gérée automatiquement sur le client JMS.Lors de la réception d’un message, si l’ID figure dans la table(message déjà reçu), le message est ignoré.
I mode DUPS_OK_ACKNOWLEDGE : le client JMS ne gèrepas de table avec les ID des messages reçus et un messagepeut alors être reçu plusieurs fois.
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
Perte du message ACK
I mode CLIENT_ACKNOWLEDGE, aucune table d’ID demessages n’est gérée.
I Une exception est levée chez le client JMS en cas dedéfaillance du serveur JMS (défaillance qui pourrait conduire leserveur JMS à redélivrer le même message).
I Lorsque l’exception est levée, le client JMS doit se préparer àrecevoir peut être le message une 2ème fois (et par exemplel’ignorer).
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
Transactions JMS
I Une transaction JMS permet de grouper l’envoi de plusieursmessages ou la réception de plusieurs messages.
I Exemple d’envoi transactionnel : un client JMS envoie m1 etm2, mais ne souhaite pas qu’en cas de défaillance (du client)seul m1 soit reçu par un serveur JMS.
I Exemple de réception transactionnelle : un client JMS souhaiterecevoir deux messages m1 et m2, et ne souhaite pas qu’en casde défaillance (du client) seul m1 ait été reçu et traité.
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
Transactions coté émetteur
I Une transaction JMS est indiquée par un paramètre aumoment de la création de la connexion entre le client JMS etle serveur JMS
I La méthode commit() est appelée pour indiquer la fin de latransaction
I Les messages sont gardés par le serveur JMS ; ils ne sont pasdélivrés à un client JMS tant que commit() n’a pas étéinvoqué.
I Si le client JMS invoque rollback() (au lieu de commit()), lesmessages sont détruits.
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
Transactions coté émetteur
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
Transactions coté récepteur
I Les messages envoyés au client JMS sont gardés par le serveurJMS ; ils sont détruits uniquement lorsque le client invoquecommit().
I Si le client invoque rollback() (au lieu de commit()), lesmessages ne sont pas détruits par le serveur JMS.
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
Transactions coté récepteur
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
Exemple : création d’un message
I ObjectMessage message = session.createObjectMessage() ;I message.setObject(myObject) ;
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
Building a JMS Sender Application
1. Get ConnectionFactory and Destination object (Topic orQueue) through JNDI
2. Create a Connection3. Create a Session to send/receive messages4. Create a MessageProducer (TopicPublisher or QueueSender)5. Start Connection6. Send (publish) messages7. Close Session and Connection
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
Building a JMS Receiver Application (non-blocking mode)
1. Get ConnectionFactory and Destination object (Topic orQueue) through JNDI
2. Create a Connection3. Create a Session to send/receive messages4. Create a MessageConsumer (TopicSubscriber or
QueueReceiver)5. Register MessageListener for non-blocking mode6. Start Connection7. Close Session and Connection
Michel Riveill Communication par messages
PlanIntroduction
JMS
GénéralitésMessages JMSMessages persistantsTransactionsExemple
Building a JMS Receiver Application (blocking mode)
1. Get ConnectionFactory and Destination object (Topic orQueue) through JNDI
2. Create a Connection3. Create a Session to send/receive messages4. Create a MessageConsumer5. Start Connection6. Receive message7. Close Session and Connection
Michel Riveill Communication par messages
Recommended