Systèmes Distribués Message-Oriented Middleware Louis-Claude Canon louis-claude

Systèmes Distribués Message-Oriented Middleware Louis-Claude Canon louis-claude.canon@univ-fcomte.fr Bureau 414C Master 2 informatique – Semestre 9 Louis-Claude Canon SD – Message-Oriented Middleware 1 / 71 Plan Introduction JMS 2.0 AMQP 0-9-1 ZeroMQ Perspectives et bibliographie Louis-Claude Canon SD – Message-Oriented Middleware 2 / 71 Introduction Plan Introduction JMS 2.0 AMQP 0-9-1 ZeroMQ Perspectives et bibliographie Louis-Claude Canon SD – Message-Oriented Middleware 3 / 71 Introduction Principe de la communication indirecte ▶Les échanges se font par l’intermédiaire d’une structure spécifique : un port, une file, un canal, . . . ▶Le flux de communication est géré par un intergiciel. ▶Assure un couplage faible entre les composants d’une application distribuée (plus de souplesse/flexibilité). Louis-Claude Canon SD – Message-Oriented Middleware 4 / 71 Introduction Intergiciel (middleware) ▶Couche logicielle intermédiaire située entre l’application et le système d’exploitation de la machine. ▶Sert à concevoir, développer et déployer une application répartie. ▶Un MOM (intergiciel orienté message) gère les échanges entre les composants distribués. Louis-Claude Canon SD – Message-Oriented Middleware 5 / 71 Introduction Services additionnels des MOM ▶Transaction : envois et réceptions groupés. ▶Persistence : retransmission des messages en cas de panne. ▶Multicast : communication de groupe. ▶Trace des échanges (log). ▶Gestion des droits d’accès. ▶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 7 / 71 Introduction Contexte applicatif ▶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. ▶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 8 / 71 JMS 2.0 Plan Introduction JMS 2.0 AMQP 0-9-1 ZeroMQ Perspectives et bibliographie Louis-Claude Canon SD – Message-Oriented Middleware 10 / 71 JMS 2.0 Architecture de l’interface JMS ▶Fournisseur JMS (provider) : système de messagerie. ▶Clients JMS : composants produisant et consommant des messages. ▶Messages : contient les informations communiquées entre les clients. ▶Objets administrés : objets JMS configurés par un administrateur. Louis-Claude Canon SD – Message-Oriented Middleware 11 / 71 JMS 2.0 Styles de communication ▶Communication point-à-point : ▶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/abonnement (publish/subscribe) : ▶Les messages transitent par un sujet (topic). ▶Chaque message peut avoir plusieurs consommateurs. ▶Un client qui s’abonne à un sujet ne peut consommer que les messages émis après l’abonnement. Louis-Claude Canon SD – Message-Oriented Middleware 13 / 71 JMS 2.0 Consommation des messages ▶Synchrone : un consommateur peut explicitement recevoir un message de la destination avec la méthode bloquante receive. ▶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 16 / 71 JMS 2.0 Séquence des messages en mode synchrone Producteur MOM Consommat. send receive Louis-Claude Canon SD – Message-Oriented Middleware 17 / 71 JMS 2.0 Séquence des messages en mode asynchrone Producteur MOM Consommat. setMessageListener send onMessage Louis-Claude Canon SD – Message-Oriented Middleware 18 / 71 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 19 / 71 JMS 2.0 Objets administrés Connection factories ▶Permet de créer une connexion auprès d’un fournisseur. ▶Injection JNDI. 1 @Resource(lookup = "java:comp/DefaultJMSConnectionFactory") 2 private static ConnectionFactory connectionFactory; Destinations ▶Représente soit des files, soit des sujets. 1 @Resource(lookup = "jms/MyQueue") 2 private static Queue queue; 3 4 @Resource(lookup = "jms/MyTopic") 5 private static Topic topic; Louis-Claude Canon SD – Message-Oriented Middleware 21 / 71 JMS 2.0 Connexion et session ▶Connexion : peut représenter un seul socket TCP/IP et est associé à une ou plusieurs sessions. ▶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 22 / 71 JMS 2.0 JMSContext ▶Combine une connexion et une session. ▶Permet de créer des producteurs et des consommateurs de messages, des messages et des destinations temporaires. 1 JMSContext context = connectionFactory.createContext(); 2 context.close(); Louis-Claude Canon SD – Message-Oriented Middleware 23 / 71 JMS 2.0 JMSProducer ▶Nécessaire pour l’envoi d’un message. ▶Objet léger, peut être recréé à chaque utilisation. 1 context.createProducer().send(dest, message); Louis-Claude Canon SD – Message-Oriented Middleware 24 / 71 JMS 2.0 JMSConsumer et réception synchrone ▶Nécessaire pour la réception d’un message. ▶Possibilité de donner une échéance en argument. 1 JMSConsumer consumer = context.createConsumer(dest); 2 Message m = consumer.receive(); Louis-Claude Canon SD – Message-Oriented Middleware 25 / 71 JMS 2.0 JMSConsumer et réception asynchrone ▶Un listener doit implémenter l’interface MessageListener qui contient une méthode, onMessage. ▶La méthode onMessage est invoquée à la réception de chaque message. 1 MessageListener myListener = new MessageListener(); 2 consumer.setMessageListener(myListener); Louis-Claude Canon SD – Message-Oriented Middleware 26 / 71 JMS 2.0 JMSConsumer et sélecteur de messages ▶Les messages reçus peuvent être filtrés. ▶Syntaxe basée sur un sous-ensemble de SQL92. ▶La sélection se fait sur les propriétés des messages. 1 message = session.createTextMessage(); 2 message.setStringProperty("NewsType", "Sports"); 1 String sel = "NewsType␣=␣’Sports’␣OR␣NewsType␣=␣’Opinion’"; 2 JMSConsumer consumer = context.createConsumer(dest, sel); Louis-Claude Canon SD – Message-Oriented Middleware 27 / 71 JMS 2.0 JMSConsumer et sujet ▶Pas de différence avec les files. ▶Tous les messages reçus lors d’une déconnexion sont perdus. 1 JMSConsumer consumer = context.createConsumer(dest); Louis-Claude Canon SD – Message-Oriented Middleware 28 / 71 JMS 2.0 JMSConsumer et sujet durable ▶Tous les messages reçus lors d’une déconnexion sont conservés. ▶Permet de réutiliser une inscription grâce à son identifiant. ▶La désinscription devient nécessaire. 1 String subName = "MySub"; 2 JMSConsumer consumer = context.createDurableConsumer(dest, subName); 3 context.unsubscribe(subName); Louis-Claude Canon SD – Message-Oriented Middleware 30 / 71 JMS 2.0 JMSConsumer et sujet partagé ▶Les messages seront répartis entre ceux qui ont participé à l’inscription. 1 String subName = "MySub"; 2 JMSConsumer consumer = context.createSharedConsumer(dest, subName); Louis-Claude Canon SD – Message-Oriented Middleware 32 / 71 JMS 2.0 Messages JMS Contient trois parties : En-tête Ensemble de champs possédant des valeurs déterminées par le client ou le fournisseur. Propriétés Champs spécifiés par l’application et servant aux sélecteurs. Corps 6 types différents. Louis-Claude Canon SD – Message-Oriented Middleware 33 / 71 JMS 2.0 En-tête des messages JMS Champ Description Défini par JMSDestination Destination du message. fournisseur JMSPriority Priorité du message. fournisseur JMSMessageID Identifiant du message. fournisseur JMSTimestamp La date de réception du message par le fournisseur. fournisseur JMSCorrelationID L’identifiant du message relatif. application JMSReplyTo Destination à utiliser pour la réponse. application . . . Louis-Claude Canon SD – Message-Oriented Middleware 34 / 71 JMS 2.0 Corps des messages JMS Type Description TextMessage Une chaîne de caractères. MapMessage Un ensemble de paires clé-valeur. BytesMessage Un flot de données binaires. StreamMessage Un flot de données primitives. ObjectMessage Un objet sérialisé. Message Ne contient rien. Louis-Claude Canon SD – Message-Oriented Middleware 35 / 71 JMS 2.0 Exceptions JMS 1 IllegalStateException // file créée sur un TopicSession 2 InvalidDestinationException // mauvaise destination 3 InvalidSelectorException // problème de syntaxe du sélecteur 4 ... Louis-Claude Canon SD – Message-Oriented Middleware 36 / 71 JMS 2.0 Exemple d’échange d’une chaîne de caractères 1 String message = "This␣is␣a␣message"; 2 TextMessage m = context.createTextMessage(); 3 m.setText(message); 4 context.createProducer().send(m); 1 JMSConsumer consumer = context.createConsumer(dest); 2 Message m = consumer.receive(); 3 if (m instanceof TextMessage) { 4 String message = m.getBody(String.class); 5 System.out.println("Reading␣message:␣" + message); 6 } else { 7 // Handle error or process another message type 8 } Louis-Claude Canon SD – Message-Oriented Middleware 38 / 71 JMS 2.0 Exemple simplifié 1 String message = "This␣is␣a␣message"; 2 context.createProducer().send(dest, message); 1 JMSConsumer consumer = context.createConsumer(dest); 2 String message = consumer.receiveBody(String.class); Louis-Claude Canon SD – Message-Oriented Middleware 39 / 71 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 40 / 71 JMS 2.0 Transaction ▶Permet de grouper l’envoi et la réception de messages en les terminant par l’appel de la méthode commit. Exemples : ▶Un client envoie deux messages mais ne souhaite pas qu’en cas de défaillance (du client), seul le premier 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 soit reçu et traité. ▶On annule une transaction par l’appel de la méthode rollback. ▶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 41 / 71 JMS 2.0 Persistance ▶Les uploads/Ingenierie_Lourd/ mom-2.pdf

  • 29
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager