Top Banner
 ESSI - Printemps 2004 JMS 1ère parti e - Annick Fron 1 JMS 1ère partie Annick Fron ESSI Printemps 2004
62

Introduction à JMS - 1e partie

Oct 07, 2015

Download

Documents

laurentd75

Annick Fron
ESSI
Printemps 2004
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 1

    JMS 1re partie

    Annick FronESSIPrintemps 2004

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 2

    Plan

    Introduction la communication par messagesCommunication point pointCommunication publish/subscribeFiltrage de messagesConclusion

  • ESSI Printemps 2004 JMS 1re partie - Annick Fron 3

    Introduction la communication par messages

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 4

    RMI, Corba ... : RPC

    A C

    B DRPC : point pointConnaissance mutuelle1 seul metteur1 seul rcepteurMessage reu ou perduDfinition d'une interface

    E F

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 5

    Communication par messages : ''destination''

    Emetteur

    Message

    Persistance

    Rcepteur

    = intermdiaireCf maillistes de diffusion

    RcepteurRcepteur

    Destination 1Destination 2

    Emetteur

    Emetteur

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 6

    Communication par messages

    Ventes

    commandes

    Livraison

    Facturation

    Comptabilit factures

    Traitement en ''diffr''Graphe mtier ; synchronisation

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 7

    Communication par vnements

    Courtier en bourse

    Courtier en bourse

    Courtier en bourse

    Courtier en bourse

    Cours > 6

    cf. ''Listener'' en java swing

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 8

    Mode push / pull

    Mode push : sirne d'alarme, publicit, spam ...le serveur diffuse une information

    Mode pull : consultation mto, requte base de donnes ...Le client sollicite une rponse

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 9

    Communication par messages

    L'metteur (resp. rcepteur) ne connat que la ''destination''Il peut y avoir plusieurs metteurs / rcepteurs sur la mme destinationLe message envoy peut tre persistant (et non reu ou perdu)Slection possible des destinataires par ''proprits'' et non nommage direct (message type=bleu)Le format du message est libre (pas d'interface respecter) comme sur une socket => souvent couplage avec XML

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 10

    Rles du message

    Message = contenu + contrleEchange d'information (contenu) Synchronisation/ coordination

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 11

    Structure d'un message

    MessagesEntte :

    Information permettant l'identification et l'acheminement du message

    Proprits :Couples (nom, valeur) utilisables par le systme ou l'application pour slectionner les messages ou les destinataires

    Donnes :Dfinies par l'application : plusieurs types (texte, binaire, ..)

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 12

    Proprits du bus de messages

    Proprits du busPriorit, ordre des messagesDure de vie des messagesFiltrage des messages

    metteur, type de message, prioritattributscontenu

    Notification des erreursQualit de service de la file de messages

    ''best effort'', fiable, persistant, transactionnelAuthentification, Scurit, Protection

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 13

    Synchrone/asynchrone

    Synchrone Asynchrone

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 14

    Srialisation temporelle des messages

    1. dcroche

    2. raccroche

    $$$$ ???

    Serveur

    2. dcroche

    1. raccroche

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 15

    Smantique one only

    ServeurRetrait 200$

    !Conn. timeout

    Retrait 200$

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 16

    Utilisation des systmes messages

    Transferts point point asynchrones (ex : swift)Couplage lche entre grosses applications (message en format libre l'inverse de RMI) : ERP, SAPNotification (ex: Tibco trackers de bourse)Diffusion une liste, un groupe d 'intrt

  • ESSI Printemps 2004 JMS 1re partie - Annick Fron 17

    JMS : Java Messaging Service

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 18

    Java Message Service

    JMS : API Java d'accs uniforme aux systmes de messagerie

    IBM Websphere MQSeriesNovell, Oracle, SybaseTibco, Sonic MQ, SwiftMQ

    2 modles de communicationPoint-to-Point (queues)Publish/Subscribe (topics)

    Package javax.jms (depuis JDK 1.4)Maintenant dans EJB avec les Message-Driven Beans

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 19

    Architecture JMSClient JMSConnection

    Session

    Producer

    Client JMSConnection

    Session

    Consumer

    Message Server

    Destinationmessage message

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 20

    Architecture JMS

    Emboitement d'abstractions : une session existe l'intrieur d'une connexionLa connexion est lie au serveur de messageIl peut y avoir plusieurs sessions par connexionLa session assure la qualit de service (gestion des erreurs, transactions ...) : gre le processus global de transmission de bout en bout, srialise les messages selon prioritLe consumer/producer n'existe qu' l'intrieur d'une session et connait la destinationLe message n'existe qu' l'intrieur d'une session

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 21

    JMS - causalit

    JNDI

    ConnectionFactory

    Connection

    Session

    MessageProducer

    MessageConsummer

    Destination

    JMS Client

    +

    +

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 22

    Point de dpart

    2 points de dpart :1) La ConnectionFactory -> Connection -> Session2) La Destination

    Le Producer/Consumer requiert : session + destinationLe Message n'existe qu' l'intrieur d'une session

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 23

    Destinations

    2 types de destinations :Queues pour le point pointTopics pour publish/subscribe

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 24

    Point point : ''Queue''Analogie avec le ''mail''Chaque message n'a qu'un seul consommateurPas de dpendance temporelle entre prod/consom

    Le consommateur envoie un reu

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 25

    Publish/subscribe : Topic

    Similaire un modle par vnements (ex : Listener d'une interface graphique)Plusieurs consommateurs sur abonnement

    Rception des messages que si prsent et abonnExtension : abonnements durables

  • ESSI Printemps 2004 JMS 1re partie - Annick Fron 26

    Mode point point

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 27

    Emetteur Destinataire

    JMS - "Point-to-Point"

    Queue

    QueueConnectionFactory

    Messaging

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 28

    JMS - "Point-to-Point"

    Emetteur Destinataire

    // La factory est souvent stocke dans JNDIQueueConnectionFactory connectionFactory =

    (QueueConnectionFactory) context.lookup("");

    QueueConnection connection = connectionFactory.createQueueConnection();QueueSession session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);//false : pas de transactions

    Queue

    QueueConnectionFactoryServeur

    QueueSession

    QueueConnection

    QueueSession

    QueueConnection

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 29

    QueueLa 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(""); soit obtenir une rfrence avec :

    session.createQueue(nomQueue)

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 30

    JMS - "Point-to-Point"

    Emetteur Destinataire

    Queue

    QueueConnectionFactoryServer

    QueueSession

    QueueConnection

    QueueSession

    QueueConnection

    +

    QueueSender

    QueueSender sender = session.createSender(queue);

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 31

    JMS - "Point-to-Point"

    Emetteur Destinataire

    Queue

    QueueConnectionFactory

    Messaging

    QueueSession

    QueueConnection

    QueueSession

    QueueConnection

    +

    QueueSender

    +

    QueueReceiver

    QueueReceiver receiver = session.createReceiver(queue);connection.start();

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 32

    Rcepteur/metteur

    La cration de session est identique ct rcepteur et ct metteurUne mme session peut utiliser la fois des metteurs et des rcepteurs, sur des queues identiques ou diffrentes

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 33

    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

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 34

    JMS - "Point-to-Point"

    Emetteur Destinataire

    Queue

    QueueConnectionFactory

    Messaging

    QueueSession

    QueueConnection

    QueueSession

    QueueConnection

    +

    QueueSender

    +

    QueueReceiver

    send

    TextMessage msg = session.createTextMessage();msg.setText("");sender.send(msg);

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 35

    Send

    Le message est cr DANS LA SESSIONL'envoi par send dpend de la smantique du serveurOn prcise la smantique avec les paramtres :

    sender.send(mess, \\le messageDeliveryMode.PERSISTENT, \\ stock sur serveurMessage.DEFAULT_PRIORITY, \\priorit dfaut60 000) \\dure de vie 60 000 ms = 1 minute

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 36

    Cration d'un message

    Session

    MessageProducer

    DestinationMessagecrecre

    envoie

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 37

    Types de messages

    Il existe plusieurs types de messages :BytesMessage : binaireMapMessage : fichier de proprits (paires attribut/valeur)ObjectMessage : object java srialisStreamMessage : une Stream de types primitifsTextMessage : une String

    setText(String); getText()

    Nota : on peut formatter le message en XML

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 38

    JMS - "Point-to-Point"

    Emetteur Destinataire

    Queue

    QueueConnectionFactory

    Messaging

    QueueSession

    QueueConnection

    QueueSession

    QueueConnection

    +

    QueueSender

    +

    QueueReceiver

    sendreceive

    TextMessage msg = (TextMessage) receiver.receive();

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 39

    Message

    Cr par session, et envoy par le sender (ct serveur)TextMessage msg = session.createTextMessage();msg.setText("");sender.send(msg);

    Reu par le receiver (ct client)TextMessage msg = (TextMessage) receiver.receive();

    Nota : le receive est bloquantVariantes :receiveNoWait()receive(timeOutEnMs)

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 40

    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 msMessage m = consumer.receiveNoWait();

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 41

    PtoP : rception asynchrone

    On attache un "MessageListener" au consumer

    MessageListener myListener = new MyListener();receiver.setMessageListener(myListener);

    On doit faire un start() sur la connection aprsconnection.start();

    Le listener doit implmenter "onMessage public void onMessage(Message message)

    { System.out.println( "Le message est "+message);}

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 42

    En rsum

  • ESSI Printemps 2004 JMS 1re partie - Annick Fron 43

    Mode publish/subscribe

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 44

    Emetteur Destinataire

    Topic

    TopicConnectionFactory

    A B

    x y

    JMS - "Publish/Subscribe"

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 45

    Emetteur Destinataire

    Topic

    TopicConnectionFactory

    A B

    x y

    JMS - "Publish/Subscribe"

    TopicConnectionFactory connectionFactory =(TopicConnectionFactory) jndiContext.lookup("");

    Topic topic = (Topic) jndiContext.lookup("/A/x");TopicConnection connection = connectionFactory.createTopicConnectio();

    TopicSession session =connection.createTopicSession(false, Session.CLIENT_ACKNOWLEDGE);

    TopicSession

    TopicConnection

    TopicSession

    TopicConnection

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 46

    Topic

    Comme pour la Queue, ils peuvent tre soit dans JNDI soit crs par la sessionA la diffrence des Queues, ce ne sont pas des objets administrs, on peut crer un Topic la vole dans intervention de l'administrateurLes Topics peuvent tre hirarchiques, et on peut utiliser des expressions rgulires

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 47

    TopicL'abonnement publish/subscribe s'appuie sur une arborescence de topics/Sport/Tennis/* (notation Websphere MQ)Sport.Tennis.* (notation SonicMQ)

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 48

    Emetteur Destinataire

    Topic

    TopicConnectionFactory

    Messaging

    A B

    x y

    JMS - "Publish/Subscribe"

    TopicPublisher publisher = session.createPublisher(topic);

    TopicSession

    TopicConnection

    TopicSession

    TopicConnection

    +

    TopicPublisher

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 49

    Emetteur Destinataire

    Topic

    TopicConnectionFactory

    Messaging

    A B

    x y

    JMS - "Publish/Subscribe"

    TopicSubscriber subscriber =session.createSubscriber(topic);

    subscriber.setMessageListener(listener);

    TopicSession

    TopicConnection

    TopicSession

    TopicConnection

    +

    TopicPublisher

    +

    TopicSubscriberListener

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 50

    Emetteur Destinataire

    Topic

    TopicConnectionFactory

    Messaging

    A B

    x y

    JMS - "Publish/Subscribe"

    TopicSession

    TopicConnection

    TopicSession

    TopicConnection

    +

    TopicPublisher

    publish +

    TopicSubscriberListener

    publisher.publish(msg);

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 51

    Emetteur Destinataire

    Topic

    TopicConnectionFactory

    Messaging

    A B

    x y

    JMS - "Publish/Subscribe

    TopicSession

    TopicConnection

    TopicSession

    TopicConnection

    +

    TopicPublisher

    publish +

    TopicSubscriberListeneronMessag

    evoid onMessage(Message msg) throws JMSException {

    // unpack and handle the message

    }

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 52

    Mode diffusionMode rception

    PtoP Pub sub

    Synchrone receive receive

    Asynchrone Onmessage onmessage

    Synchrone/asynchrone

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 53

    Parallle PtoP / Pubsub

    Abstrait PtoP PubsubConnectionFactory QueueConnectionFactory TopicConnectionFactoryConnection QueueConnection TopicConnectionDestination Queue Topic Session QueueSession TopicSessionMessageProducer QueueSender TopicPublisher MessageConsumer QueueReceiver TopicSubscriber

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 54

    Hirarchie de classes parallles

    TopicSubscriber

    MessageConsumer

    QueueReceiver

    receivesetMessageListener

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 55

    Aperu du parallle

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 56

    JMS 1.1 : unification Queue/TopicConnectionFactory factory = (new

    progress.message.jclient.ConnectionFactory (broker));Connection connection = factory.createConnection ();Session pubSession = connection.createSession

    (false,Session.AUTO_ACKNOWLEDGE);Topic topic = pubSession.createTopic (APP_TOPIC);MessageConsumer subscriber = subSession.createConsumer

    (topic); subscriber.setMessageListener(this);MessageProducer publisher = pubSession.createProducer

    (topic);publisher.send(message); // au lieu de publish

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 57

    Filtrage de messages

    Filtre

    Prop = 'blue'Prop = 'green'

    Prop = 'yellow'

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 58

    Filtrage des messages en PtoP

    Ct metteurmessage.setStringProperty(" myProp ", " blue ");

    Ct rcepteurqueueReceiver = session.createReceiver(ioQueue,

    "myProp = 'blue'");

    Nota : il est impossible de modifier le slecteur du receiver aprs crationExpressions logiques pour le filtrageNota :

    createReceiver (queue)createReceiver (queue, selector)

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 59

    Expressions logiques pour le filtrage

    Proprits types (String, long, Object ...)

    message.setStringProperty(propName,propValue)

    Sous-ensemble de SQL92 : attention aux quotes

    (Country = ' UK') OR (Country = ' US') OR (Country = ' France')

    age >= 15 AND age

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 60

    Filtrage des topics en pubsub

    On peut dfinir des jokers sur les Topics (* pour IBM ou Sonic)On peut filtrer sur l'arborescence

    ex:

    Tous les rsultatsSport/Football/*/Results

    Toutes les quipesSport/Football/* Sport.Football.* (Sonic)

  • ESSI - Printemps 2004 JMS 1re partie - Annick Fron 61

    Conclusions

    JMS permet une communication par messagesUn 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 JMS 1re partie - Annick Fron 62

    Quelques rfrences...Websphere MQ (ex MQSeries) d'IBM : http://www-3.ibm.com/software/ts/mqseries/messaging/Sonic MQ : http://www.sonicsoftware.com/products/sonicmq/index.sspJoram http://www.objectweb.org/joram (Open Source)Tibco : http://www.tibco.com/services/education/wbt_demo/wbt112/unit1/main.htmlSwift MQ : http://www.swiftmq.com/JMS Tutorial : http://java.sun.com/products/jms/tutorial/index.htmlMessage-driven bean : http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/EJBConcepts5.htmlhttp://www.afceurope.com/JMS.html