Java Message Services

1,220 views
1,105 views

Published on

JMS (Java Message Services) est une API qui permet aux applications Java de s'échanger des messages asynchrones par le biais d'un MOM (Message Orieneted Middleware). Cette session passera en revue l'API Java Message Services et présentera quelques retours d'expérience sur sa mise en œuvre.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,220
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
32
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Java Message Services

  1. 1. JMS <br />Tour d’horizon<br />
  2. 2. Agenda<br />Présentation<br />Pourquoi JMS ?<br />Structure d’un message<br />Modes de communications<br />Modes d’utilisation de JMS<br />Points d’attention<br />Futur de JMS<br />Questions<br />
  3. 3. Présentation<br />API ancienne (1.1 en 2002)<br />Permettre l’échange de message<br />Découplage lâche<br />Portage de MQSeries et donc interaction avec les gros systèmes<br />
  4. 4. Pourquoi JMS ?<br />Intégration d’environnements hétérogènes<br />Réduction des bottlenecks<br />Améliorer la scalabilité<br />Flexibilité de l’architecture<br />
  5. 5. Vocabulaire<br />ConnectionFactory<br />crée<br />Connection<br />crée<br />crée<br />crée<br />Session<br />crée<br />Message Producer<br />Message Consumer<br />Message<br />Envoie<br />Recoit<br />Destination<br />
  6. 6. Vocabulaire<br />Message<br />Header<br />Payload<br />
  7. 7. Structure d’un message<br />Header<br />JMS…<br />JMSX…<br />Properties<br />Payload<br />
  8. 8. Structure d’un messageHeader - JMS<br />Champs pré-remplis<br />JMSDestination (queue ou topic)<br />JMSDeliveryMode (persistent ou non)<br />JMSMessageID<br />JMSTimestamp<br />JMSExpiration<br />JMSRedelivered<br />JMSPriority<br />Champs à remplir<br />JMSReplyTo<br />JMSCorrelationID<br />JMSType (type de message, dépendant du MOM)<br />
  9. 9. Structure d’un messageHeader - JMSX<br />Spécifique au provider <br />2 propriétés pour grouper des messages <br />JMSXGroupID<br />JMSXGroupSeq<br />
  10. 10. Structure d’un messageHeader - Properties<br />Type primitif <br />Libre <br />Filtrable <br />Définissable uniquement avant l’envoie <br />
  11. 11. Structure d’un messagePayload<br />Text<br />Object<br />Bytes<br />Stream<br />Map<br />
  12. 12. Mode de communication<br />Publish / Subscribe<br />Point to Point<br />Filtrage<br />Transaction<br />
  13. 13. Mode de communication Publish - Subscribe<br />Type twitter<br />Un message pour plusieurs destinataires <br />Destinataires non connus <br />Messages éphémères <br />Les destinataires reçoivent une copie du message <br />
  14. 14. Mode de communication Point to Point<br />Echange via une Queue <br />1 émetteur – 1 recepteur<br />1 seul récepteur même si plusieurs listeners<br />On consomme toujours le 1er message <br />Communication asynchrone <br />Fire-and-forget<br />Request-reply<br />correlationID<br />Acknowledge<br />
  15. 15. Mode de communication Filtrage<br />Sur le receiver<br />Sur le MDB<br />Xml<br />Annotation<br />receiver= session.createReceiver(queue, filter)<br /><messageSelector>filter</messageSelector><br />@MessageDriven(…<br />activationConfig={<br />@ActivationConfigProperty(<br />propertyName= ″messageSelector″,<br />propertyValue= ″filter″<br />)<br /> }<br />)<br />
  16. 16. Mode de communication Filtrage - syntaxe<br />Syntaxe SQL like<br />Opérateurs arithmétiques<br />+,-,*,/<br /><, >, <=, >=, =<br />Opérateurs logiques<br />and , or, like, between, in, not, isnull<br />Exemple<br />Filter = String.format(″JMSCorrelationID=‘%1$s’ and myPoperty=’%2$s’ ″,<br />message.getJMSMessageID(),<br />″uneValeurPertinente″);<br />
  17. 17. Mode de communication Transactions<br />Emetteur<br />Recepteur<br />Groupes de messages<br />Transactions distribuées<br />
  18. 18. Mode de communication Transactions - Emetteur<br />L’émetteur envoie son message au MOM<br />Le MOM garanti la persistance du message<br />Possibilité de commit après plusieurs envois<br />
  19. 19. Mode de communication Transactions - Récepteur<br />Un message n’est consommé qu’une fois<br />Mode de transaction <br />Auto-acknowledge<br />Client-acknowledge<br />Redelivery<br />Dead-letterqueue <br />
  20. 20. Mode de communication Transactions – Groupes de messages<br />2 propriétés<br />JMSXGroupID<br />JMSXGroupSeq<br />Spec floues<br />
  21. 21. Mode de communication Transactions – Transactions distribuées<br />Optionnel<br />Les mêmes avec XA<br />XAConnectionFactory<br />XAQueueConnectionFactory<br />XATopicConnectionFactory<br />XAConnection<br />XAQueueConnection<br />XATopicConnection<br />XASession<br />XATopicSession<br />XAQueueSession<br />Performances<br />
  22. 22. Modes d’utilisation de JMS<br />MessageListener, Receiver<br />MessageDrivenBean depuis EJB3<br />Spring<br />REST<br />
  23. 23. Modes d’utilisation de JMSMessageListener - Receiver<br />Traitement de la queue à la demande<br />Contrôle plus fin<br />On doit gérer le processing des queues à la main<br />Attention aux threads<br />
  24. 24. Modes d’utilisation de JMSMessageDrivenBean<br />Depuis EJB3<br />Configurable par xml/annotation<br />Scale automatiquement<br />Se gère via JMX<br />
  25. 25. Points d’attention<br />Messages<br />Utilisation de MDB<br />Propriétés auto-settées<br />Infrastructure<br />Architecture logicielle<br />
  26. 26. Points d’attentionMessages - MDB<br />Message façade : traite des messages et en réémet en réponse<br />Transformation-routage<br />
  27. 27. Points d’attentionMessages - Propriétés<br />TextMessagemsg = session.createTextMessage();<br />msg.setText(″blabla″);<br />msg.setJMSExpiration(System.getcurrentTimeMillis()+3600000);<br />QueueSendersender = session.createSender(queue);<br />sender.setTimeToLive(3600000);<br />sender.send(msg);<br />
  28. 28. Points d’attentionInfrastructure<br />MOM embarqué ou stand-alone<br />Sécurité : communication ou message<br />
  29. 29. Points d’attentionArchitecture logicielle<br />Une Queue par type de message<br />Mauvaise gestion des priorités<br />Monitoring des queues<br />
  30. 30. Futur de JMS<br />Meilleure interopérabilité<br />Spec de la v2 sont à l’étude<br />AMQP<br />
  31. 31. Questions<br />

×