IntroductionLes intergiciels à messages
Le standard JMS (Java Message Service)
Quatrième partie
Intergiciels à messageMessage Oriented Middleware
Intergiciels et applications communicantes 1 / 27
IntroductionLes intergiciels à messages
Le standard JMS (Java Message Service)
La communication asynchrone par messageExempleLes principes
Plan
1 IntroductionLa communication asynchrone par messageExempleLes principes
2 Les intergiciels à messagesFonctionnalitésStandardisation et produits
3 Le standard JMS (Java Message Service)Les concepts et principesLes principales classesUn exemple de publication/abonnement
IV – Intergiciels à message 2 / 27
IntroductionLes intergiciels à messages
Le standard JMS (Java Message Service)
La communication asynchrone par messageExempleLes principes
La communication asynchrone par message
Objectif : exploiter les possibilités d’une communication asynchrone
AvantagesÉvite le blocage de l’appelant inhérent à l’appel procéduralDécouple l’envoi de la réceptionRécepteur(s) anonyme(s)Étend le simple protocole point-à-pointAutorise une communication de type publication/abonnement(publish/subscribe) : protocole m → n
DifficultéProgrammation délicate car asynchrone :Approche événementielle : Événement → Réaction
IV – Intergiciels à message 3 / 27
IntroductionLes intergiciels à messages
Le standard JMS (Java Message Service)
La communication asynchrone par messageExempleLes principes
Communication indirecte
Communication directe
P1 P2
Site S1 Site S2Réseau
Communication indirecte
Site S1 Site S2
Serveurcourtier
Site S3
Editeur Abonné
IV – Intergiciels à message 4 / 27
IntroductionLes intergiciels à messages
Le standard JMS (Java Message Service)
La communication asynchrone par messageExempleLes principes
Exemple : supervision d’un réseauContexte
Surveillance de l’état de machines, systèmes et applicationsdans un environnement distribuéFlot permanent de données en provenance de sources diversessur le réseauPossibilité permanente d’évolution (ajout, suppression,déplacement des équipements)Possibilité d’accès des administrateurs depuis n’importe quelposte de travail
Objectifssuivi des changements de configuration dynamiquesémission de messages signalant les changements d’état et lesmises à jourstatistiques, journal de fonctionnement
IV – Intergiciels à message 5 / 27
IntroductionLes intergiciels à messages
Le standard JMS (Java Message Service)
La communication asynchrone par messageExempleLes principes
Approche client-serveur
Interactions synchronesCommunication essentiellement 1 vers 1 (ou n vers 1)Entités (clients, serveurs) désignées explicitementOrganisation de l’application plutôt statique
IV – Intergiciels à message 6 / 27
IntroductionLes intergiciels à messages
Le standard JMS (Java Message Service)
La communication asynchrone par messageExempleLes principes
Approche client-serveur par inversion de contrôle
Client-serveur avec inversion du contrôleLe service d’administration s’abonne auprès des clients sur lesévénements qui l’intéressentLes clients contactent le service d’administration en cas de telévénement⇒ mécanisme de « callback »Entités (clients, serveurs) désignées explicitementOrganisation de l’application plutôt statiqueDécouverte de nouveaux équipements ?
IV – Intergiciels à message 7 / 27
IntroductionLes intergiciels à messages
Le standard JMS (Java Message Service)
La communication asynchrone par messageExempleLes principes
Approche MOM
Les composants administrés émettent des messages :changements d’état et de configuration, d’alerteshorloge (relevé périodique, statistiques)
Des processus cycliques (démons) mettent à jour l’état dusystème à partir des notifications reçuesInversion des rôles des producteurs et des consommateurs dedonnées
IV – Intergiciels à message 8 / 27
IntroductionLes intergiciels à messages
Le standard JMS (Java Message Service)
La communication asynchrone par messageExempleLes principes
Les principes
Communication asynchrone par messagesEnvoi asynchrone : l’émetteur ne se bloque pasRéception sélective à la demande du récepteurDiffusion possible d’un message à plusieurs récepteursCouplage minimal entre émetteur et récepteur :
L’émetteur ne connaît pas le(s) récepteur(s) : il publieUn récepteur doit explicitement souscrire pour recevoirUn récepteur contrôle à quel moment il accepte
Le récepteur peut ne pas être actif (présent) lorsque lemessage est envoyé
Usage : Architectures logicielles à composants
IV – Intergiciels à message 9 / 27
IntroductionLes intergiciels à messages
Le standard JMS (Java Message Service)
La communication asynchrone par messageExempleLes principes
Queue vs Sujet (Topic)
File de messages / Message QueueInterface : ajouter dans la file, retirer dans la filePlusieurs producteurs, plusieurs consommateursRetrait destructifPersistanceDécouplage temporel production / consommation
Publication / abonnementInterface : envoyer un message, obtenir un messagePlusieurs producteurs, plusieurs consommateursRetrait non destructif, mais chaque consommateur n’obtientqu’au plus une fois chaque messageAbonnement pour délivrance asynchrone
IV – Intergiciels à message 10 / 27
IntroductionLes intergiciels à messages
Le standard JMS (Java Message Service)
La communication asynchrone par messageExempleLes principes
L’échange par publication/abonnement (publish/subscribe)
Cl1 Cl3Cl2
Serveur
publier(QuelSujet)
s'abonner(QuelSujet)
délivrer(M)
délivrer(M)
QuelSujet
s'abonner(QuelSujet)envoyer(M)
Précédence temporelle : on ne peut recevoir que ce qui a étépublié après s’être abonné (contrairement à une queue)
IV – Intergiciels à message 11 / 27
IntroductionLes intergiciels à messages
Le standard JMS (Java Message Service)
La communication asynchrone par messageExempleLes principes
Modèle requête/réponse
Modèle client-serveur avec des messages :Une file de requêtes par serveurUne file de réponse par clientUne requête identifie la file de réponse à utiliserClient :
1 envoyer message de requête sur la file de requête2 attendre message de reponse sur sa file de réponse
Serveur :1 attendre message de requête sur la file de requête2 traiter la requête3 envoyer message de reponse sur la file de réponse identifiée
dans la requête
IV – Intergiciels à message 12 / 27
IntroductionLes intergiciels à messages
Le standard JMS (Java Message Service)
La communication asynchrone par messageExempleLes principes
Domaine d’application : systèmes faiblement couplés
Découplage temporel : interactions asynchrones / systèmesautonomes communicants
Communication en mode « push » : découverte des évolutionsde l’environnementFonctionnement en mode déconnecté : site absent ouutilisateur mobile
Découplage spatial : systèmes à grande échelleFonctionnement en mode partitionné / déconnectéCommunication « anonyme »Communication n–m
Découplage sémantique : systèmes hétérogènesModèle d’interaction minimal → possibilité d’intégrer desenvironnements (systèmes, réseaux) / applications hétérogènes
IV – Intergiciels à message 13 / 27
IntroductionLes intergiciels à messages
Le standard JMS (Java Message Service)FonctionnalitésStandardisation et produits
Plan
1 IntroductionLa communication asynchrone par messageExempleLes principes
2 Les intergiciels à messagesFonctionnalitésStandardisation et produits
3 Le standard JMS (Java Message Service)Les concepts et principesLes principales classesUn exemple de publication/abonnement
IV – Intergiciels à message 14 / 27
IntroductionLes intergiciels à messages
Le standard JMS (Java Message Service)FonctionnalitésStandardisation et produits
Les intergiciels à messagesMOM : Message-Oriented Middleware
Architecture et fonctionnalités de baseLes clients (applicatifs) s’adressent à un serveurIls envoient/recoivent leurs messages au(x) serveur(s)Un service courtier (broker ou provider) sert d’intermédiairepour stocker et router les messages vers leurs destinatairesLe protocole d’échange peut être de type publier/s’abonner(publish/subscribe)Critère de réception par le contenu, par le sujet (topic)Gestion de la persistance des messagesCommunication point-à-point possible
IV – Intergiciels à message 15 / 27
IntroductionLes intergiciels à messages
Le standard JMS (Java Message Service)FonctionnalitésStandardisation et produits
Architectures du service courtier
Centralisée Snowflake
S
C C
C C
S
C S
C S
S
S
C
C
S
C S
C SS
C
C
C C C
Distribuée Bus logiciel
IV – Intergiciels à message 16 / 27
IntroductionLes intergiciels à messages
Le standard JMS (Java Message Service)FonctionnalitésStandardisation et produits
Intergiciel à messages (suite)
Les éléments d’un intergiciel à messageService de gestion des messages implanté par un ou plusieursserveurs (providers)Une API clientLes objets messages pour communiquer
La notion de messagel’en-tête ou header qui contient les informations de gestion :
file destinataire, identifiant du messagedates de disponibilité, d’échéance, . . .
les propriétés : suite de couples (clé,valeur) précisant lecontenu du messageles données applicatives (charge utile ou payload)
IV – Intergiciels à message 17 / 27
IntroductionLes intergiciels à messages
Le standard JMS (Java Message Service)FonctionnalitésStandardisation et produits
Intergiciel à messages (suite)
Fonctionnalités complémentairesDéfinition de priorités entre messagesCompression des données utiles du messsageÉchéance maximale pour recevoir un messagePublication à date minimale fixéeRoutage des messages d’un serveur à l’autre (forward)Lancement d’applications lorsque des messages sontdisponibles pour ellesPossibilité d’alertes sur critères :
Présence de messages dans une file donnéeNombre de messages présents
IV – Intergiciels à message 18 / 27
IntroductionLes intergiciels à messages
Le standard JMS (Java Message Service)FonctionnalitésStandardisation et produits
La standardisation et les produits MOM
Un standard de fait pour l’API : JMS (Java Message Service)Quelques MOM :
Version réalisée par Sun (Sun Java System Message Queue)ActiveMQ de ApacheJoram de l’INRIA (intégré dans Jonas)OpenJMS, premier Open Source compatible JMSProgress SonicMQ (produit commercial)Version Microsoft : MSMQ (associé à .Net)
IV – Intergiciels à message 19 / 27
IntroductionLes intergiciels à messages
Le standard JMS (Java Message Service)
Les concepts et principesLes principales classesUn exemple de publication/abonnement
Plan
1 IntroductionLa communication asynchrone par messageExempleLes principes
2 Les intergiciels à messagesFonctionnalitésStandardisation et produits
3 Le standard JMS (Java Message Service)Les concepts et principesLes principales classesUn exemple de publication/abonnement
IV – Intergiciels à message 20 / 27
IntroductionLes intergiciels à messages
Le standard JMS (Java Message Service)
Les concepts et principesLes principales classesUn exemple de publication/abonnement
Le standard JMS (Java Message Service)
Les objets globaux (administrés) accessibles à distanceDésignation par JNDI (Java Naming and Directory Interface)Les fabriques de connexions (connection factories)Les destinations réparties en 2 domaines de désignation :
files (queues) et sujets (topics)Ces objets sont créés dans le(s) serveur(s) courtier(s)implantant JMS
Les objets clientsLes connexions permettent de se connecter à un serveur JMSLes sessions gèrent les échanges via une file ou un sujetLes producteurs/consommateurs de messages pour l’envoi/laréception de messages dans le cadre d’une session
IV – Intergiciels à message 21 / 27
IntroductionLes intergiciels à messages
Le standard JMS (Java Message Service)
Les concepts et principesLes principales classesUn exemple de publication/abonnement
Les objets de communication
ConnectionFactory
Queue
Topic
Destinations
Connection
createXConnection()
XSession
MessageProducer
MessageConsumer
Msg
createXSession(...)
createPublisher
X = Queue ou Topic
createSubscriber
createMessage
CLIENT
SERVEUR
createSender createReceiver
MessageListener
IV – Intergiciels à message 22 / 27
IntroductionLes intergiciels à messages
Le standard JMS (Java Message Service)
Les concepts et principesLes principales classesUn exemple de publication/abonnement
Un exemple de publication/abonnementLe client éditeur : nom de la destination fourni dans args[0]
import javax.jms.* ; import javax.naming.* ;public class Editeur {public static void main(String[] args) {try {InitialContext jndiCtx = new InitialContext();ConnectionFactory scf = (C...) jndiCtx.lookup("MaConnFactory");Destination dest = (Destination) jndiCtx.lookup(args[0]);Connection conn = scf.createConnection();conn.start();Session session =
conn.createSession(false,Session.AUTO_ACKNOWLEDGE);MessageProducer editeur = session.createProducer(dest);TextMessage m = session.createTextMessage();m.setText("publication exemple");editeur.send(m); ...
}IV – Intergiciels à message 23 / 27
IntroductionLes intergiciels à messages
Le standard JMS (Java Message Service)
Les concepts et principesLes principales classesUn exemple de publication/abonnement
Un exemple de publication/abonnementUn client abonné : nom de la source fourni dans args[0]
import javax.jms.* ; import javax.naming.* ;public class Abonne {public static void main(String[] args) {try {InitialContext jndiCtx = new InitialContext();ConnectionFactory scf = (C...) jndiCtx.lookup("MaConnFactory");Destination src = (Destination) jndiCtx.lookup(args[0]);Connection conn = scf.createConnection();Session session =
conn.createSession(false,Session.AUTO_ACKNOWLEDGE);MessageConsumer abonné = session.createConsumer(src);abonné.setMessageListener(new MonMsgListener());conn.start();...
IV – Intergiciels à message 24 / 27
IntroductionLes intergiciels à messages
Le standard JMS (Java Message Service)
Les concepts et principesLes principales classesUn exemple de publication/abonnement
Un exemple de publication/abonnementLe traitant activé sur occurrence d’un message
import javax.jms.* ;public class MonMsgListener implements MessageListener {
public void onMessage(Message m) {try {if (m instanceof TextMessage) {TextMessage msg = (TextMessage) m ;System.out.println(msg.getText()) ;}
} catch (JMSException je) {...}}
}
IV – Intergiciels à message 25 / 27
IntroductionLes intergiciels à messages
Le standard JMS (Java Message Service)
Les concepts et principesLes principales classesUn exemple de publication/abonnement
Un exemple de publication/abonnementLa création des objets globaux
public class CreateDestination {public static void main(String args[]) throws Exception {
// Creating the JMS administered objects:ConnectionFactory connFactory
= TcpConnectionFactory.create("localhost", 16010);
Destination destination = Topic.create(0);// Destination destination = Queue.create(0);
// Binding objects in JNDIjavax.naming.Context jndiCtx = new InitialContext();jndiCtx.bind("MaConnFactory", connFactory);jndiCtx.bind("MonTopic", destination);}
}
IV – Intergiciels à message 26 / 27
IntroductionLes intergiciels à messages
Le standard JMS (Java Message Service)
Les concepts et principesLes principales classesUn exemple de publication/abonnement
Conclusion
Mode de communication adaptée à la circulation desinformations dans le système informatique des entreprisesIntégration dans des intergiciels à base de composantsMécanisme de base dans les bus de services
IV – Intergiciels à message 27 / 27