Vous êtes sur la page 1sur 20

Introduction JMS

SysRpJMS

A. Schiper

Et 2007 1

Introduction
JMS = Java Messaging Service JMS est une API Java propose par Sun, permettant aux applications rparties de crer, envoyer, recevoir et lire des messages premire specification publie en 1998 un fournisseur JMS (JMS provider) est un systme qui implmente les interfaces JMS (et offre des outils d'administration)

Remarque: JMS permet un couplage faible entre entits rparties (les diffrentes entits n'ont pas besoin d'tre actives simultanment) Par comparaison RMI, CORBA: couplage fort entre entits rparties (les diffrentes entits doivent tre actives simultanment)
SysRpJMS A. Schiper Et 2007 2

Rfrences
R. Monson-Haefel, D.A. Chappell Java Message Service O'Reilly, 2001 P. Giotta et al. Professional JMS Programming Wrox Press, 2000 http://java.sun.com/products/jms/tutorial/

SysRpJMS

A. Schiper

Et 2007 3

JMS: les deux modles de communication


JMS offre deux modles de communication par change de messages: communication point--point bas sur une queue de messages (1 vers 1). Il peut y avoir plusieurs metteurs et plusieurs rcepteurs. publish-subscribe (1 vers n). Il peut y avoir plusieurs "publishers".

point--point

metteur

envoie msg

queue

consomme rcepteur msg

site 1

site 2
1: souscrit

site 3
souscripteur site 3

pub/sub

publisher

2: publie msg

sujet

3: reoit msg souscripteur site 4


Et 2007 4

site 1
SysRpJMS A. Schiper

site 2

JMS: les deux modles de communication (2)


Exemple d'utilisation d'une queue: Une queue pour stocker les commandes d'une entreprise Les reprsentants de l'entreprise envoient des commandes dans cette queue Les units de fabrication prlvent des commandes dans cette queue pour excution

SysRpJMS

A. Schiper

Et 2007 5

JMS: les deux modles de communication (3)


Exemple d'utilisation du modle publish/subscribe: Bourse: les sujets (topics) correspondent aux diffrentes entreprises cotes La bourse publie rgulirement une mise jour des cours des diffrentes entreprises Un client intress au cours des actions IBM, souscrit ce sujet. Un sujet correspond ici une entreprise X, et les messages publis aux diffrents cours de laction de lentreprise X

SysRpJMS

A. Schiper

Et 2007 6

Communication point--point (PTP)


l'metteur envoie son message dans une queue le destinataire prlve un message dans une queue (chaque message n'est reu que par un seul destinataire). Les messages sont prlevs dans l'ordre FIFO. les messages peuvent tre persistants ou non persistants (seul un message persistant survit la dfaillance du serveur qui gre la queue)

SysRpJMS

A. Schiper

Et 2007 7

Pub/sub
le "publisher" adresse son message un sujet un souscripteur souscrit un sujet un message peut tre reu par de multiples destinataires (les diffrents souscripteurs) un souscripteur qui souscrit l'instant t ne reoit que les messages publis aprs t. Par ailleurs, le souscripteur doit rester actif pour continuer recevoir les messages publis. souscription durable: permet au souscripteur de recevoir les messages publis pendant les priodes ou le souscripteur n'est pas actif les messages peuvent tre persistants ou non persistants (seul un message persistant survit la dfaillance du serveur qui gre le sujet) NB La durabilit est une proprit lie au souscripteur, alors que la persistance est une proprit lie au serveur qui gre le sujet
A. Schiper Et 2007 8

SysRpJMS

Rception de messages
La rception de messages peut tre synchrone ou asynchrone: rception synchrone: le destinataire (modle PTP) ou le souscripteur (modle pub/sub) appelle la mthode receive. L'appel est bloquant jusqu' ce qu'un message soit obtenu. Il est possible de spcifier un timeout. rception asynchrone: le destinataire (PTP) ou le souscripteur peut enregistrer un message listener, qui est un objet contenant une mthode onMessage. Cette mthode est appele lors de la rception d'un message.

SysRpJMS

A. Schiper

Et 2007 9

Client JMS / serveur JMS


client JMS: programme ou composant crit en Java qui envoie ou reoit des messages serveur JMS: composant qui permet des clients JMS de communiquer entre eux (serveur JMS est fournit par un JMS provider)
client JMS metteur envoie serveur JMS queue consomme client JMS rcepteur

point--point

client JMS publisher


SysRpJMS

publie serveur souscrit client JMS JMS reoit sujet + messages souscripteur
A. Schiper

pub/sub

Et 2007 10

Messages persistants

Les messages persistants (PTP ou pub/sub) sont conservs par le serveur JMS sur disque. Les messages survivent ainsi une dfaillance du serveur JMS.

Dans le cas de messages persistants, le protocole entre client JMS et serveur JMS inclus un message dacquittement (cf slides suivants)

SysRpJMS

A. Schiper

Et 2007 11

Messages persistants (2)


Envoi de message persistant: la mthode appele par le client ne se termine que lorsque le message est stock sur disque
metteur / publisher client JMS (3) ack (4) retour de la mthode d'envoi (1) envoie queue / sujet serveur JMS rcepteur / souscripteur client JMS

(2) criture sur disque disque

SysRpJMS

A. Schiper

Et 2007 12

Messages persistants (3)


Rception de message persistant: le message n'est effac du disque que lorsque le serveur JMS a reu un ACK du client JMS.
metteur / publisher client JMS queue / sujet serveur JMS rcepteur / souscripteur client JMS

(1) rception (2) ack

(3) message effac du disque disque

SysRpJMS

A. Schiper

Et 2007 13

Envoi des ACKs

En mode AUTO_ACKNOWLEDGE, les ACKs sont envoys automatiquement, soit la fin de la mthode receive() (rception synchrone), soit la fin de la mthode onMessage() (rception asynchrone) Le rcepteur peut galement contrler manuellement l'envoi du ACK. Pour cela il doit utiliser le mode CLIENT_ACKNOWLEDGE. Le ACK est envoy en appelant la mthode message.acknowledge().

SysRpJMS

A. Schiper

Et 2007 14

Problme des dfaillances


Si le serveur JMS tombe en panne, le message reu par le client JMS n'est pas ncessairement effac du disque. Dans ce cas, lorsque le serveur JMS redmarre, il cherchera renvoyer le mme message. Il peut tre souhaitable d'viter qu'un mme message ne soit reu plus d'une fois par l'application.
metteur / publisher client JMS queue / sujet rcepteur / souscripteur (1) rception serveur client JMS JMS (2) ack

(3) message effac du disque disque

SysRpJMS

A. Schiper

Et 2007 15

Problme des dfaillances (2)


En mode AUTO_ACKNOWLEDGE une table des ID de messages reus est gre automatiquement sur le client JMS. Lors de la rception d'un message, si l'ID figure dans la table (message dj reu), le message est ignor. Si la rception multiple d'un message ne pose pas de problme au client JMS, celui-ci peut se mettre dans le mode DUPS_OK_ACKNOWLEDGE. Dans ce cas le client JMS ne gre pas de table avec les ID des messages reus (comme dans le mode AUTO_ACKNOWLEDGE). En mode CLIENT_ACKNOWLEDGE, aucune table d'ID de messages n'est gre. Toutefois une exception est leve chez le client JMS en cas de dfaillance du serveur JMS (qui pourrait conduire le serveur JMS redlivrer le mme message). Lorsque l'exception est leve, le client JMS doit se prparer recevoir le message une 2me fois (et par exemple l'ignorer).

SysRpJMS

A. Schiper

Et 2007 16

Transactions JMS
Une transaction JMS permet de grouper l'envoi de plusieurs messages ou la rception de plusieurs messages. Exemple d'envoi transactionnel: un client JMS envoie m1 et m2, mais ne souhaite pas qu'en cas de dfaillance (du client) seul m1 soit reu par un serveur JMS. Exemple de rception transactionnelle: Un client JMS souhaite recevoir deux messages m1 et m2, et ne souhaite pas qu'en cas de dfaillance (du client) seul m1 ait t reu et trait.
SysRpJMS A. Schiper Et 2007 17

Transactions JMS (2)


Une transaction JMS est indique par un paramtre au moment de la cration de la connexion entre le client JMS et le serveur JMS La mthode commit() est appele pour indiquer la fin de la transaction

Exemple 1: transaction de lmetteur


client JMS (1) envoie (2) envoie (3) commit serveur JMS client JMS

Les messages sont gards par le serveur JMS; ils ne sont pas dlivrs un client JMS tant que commit() n'a pas t invoqu. Si le client JMS invoque rollback() (au lieu de commit()), les messages sont dtruits.
SysRpJMS A. Schiper Et 2007 18

Transactions JMS (3)


Exemple 2: transaction du rcepteur
(1) reoit serveur (2) reoit JMS (3) commit

client JMS

client JMS

Les messages envoys au client JMS sont gards par le serveur JMS; ils sont dtruits uniquement lorsque le client invoque commit(). Si le client invoque rollback() (au lieu de commit()), les messages ne sont pas dtruits par le serveur JMS.

SysRpJMS

A. Schiper

Et 2007 19

Transactions JMS (4)


Il est galement possible de grouper dans une transaction une rception et un envoi de messages (par ex. rception d'une queue q1 et envoi dans une queue q2) Par contre, ne jamais grouper dans une transaction (1) un envoi de messages, suivi (2) d'une rception de messages. Cela provoque un interblocage!

Exemple 3
client JMS

(1) envoie (2) reoit (3) commit

serveur JMS

client JMS

SysRpJMS

A. Schiper

Et 2007 20

Vous aimerez peut-être aussi