Jms.back.to.basic

1,053 views
1,007 views

Published on

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

  • Be the first to like this

No Downloads
Views
Total views
1,053
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
30
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Jms.back.to.basic

  1. 1. JMS Back To Basic
  2. 2. Un peu histoire <ul><li>Une API guidée par les entreprises
  3. 3. JSR 914 </li><ul><li>JMS 1.0.2b: juin 2001
  4. 4. JMS 1.1: mars 2002 </li></ul><li>JSR 343: JMS 2 dans JavaEE 7 </li></ul>
  5. 5. Implémentations <ul><li>Serveurs d'applications: standard JEE
  6. 6. Constructeurs payants: </li><ul><li>Websphere MQ aka MQ Series
  7. 7. Tibco EMS
  8. 8. Sonic MQ (Progress Software)
  9. 9. Fiorano MQ
  10. 10. Swift MQ </li></ul><li>Constructeurs gratuits: </li><ul><li>OpenMQ (Sun/Oracle)
  11. 11. ActiveMQ
  12. 12. HornetQ aka Jboss Messaging
  13. 13. JORAM (JOnAS) </li></ul></ul>
  14. 14. Une API simple Connection Factory Connection Session Message Consumer Message Message Producer Destination Objets JMS administrés via JNDI
  15. 15. Domaines <ul><li>2 types de domaine </li><ul><li>Point-to-point: Queue
  16. 16. Publish/subscribe: Topic </li><ul><li>Non durable
  17. 17. Durable: ClientId </li></ul></ul><li>Store-and-forward </li><ul><li>Persistence </li></ul></ul>
  18. 18. Une API redondante ? Queue Connection Factory Queue Connection Queue Session Queue Sender Message Queue Receiver Queue Objets JMS administrés via JNDI
  19. 19. Une API redondante ? Topic Connection Factory Topic Connection Topic Session Topic Sender Message Topic Receiver Topic Objets JMS administrés via JNDI
  20. 20. Structure d'un message
  21. 21. Structure d'un message: Header <ul><li>Assignés par le broker </li><ul><li>JMSDestination
  22. 22. JMSDeliverMode
  23. 23. JMSMessageID
  24. 24. JMSTimestamp
  25. 25. JMSExpiration
  26. 26. JMSRedelivered
  27. 27. JMSPriority </li></ul></ul><ul><li>Assignés par le dev. </li><ul><li>JMSReplyTo
  28. 28. JMSCorrelationID
  29. 29. JMSType </li></ul><li>Propriétés optionnels </li><ul><li>JMSXGroupID
  30. 30. JMSXGroupSeq
  31. 31. JMSX... </li></ul></ul>
  32. 32. Structure d'un message: Header <ul><li>Assignés par le broker </li><ul><li>JMSDestination
  33. 33. JMSDeliverMode
  34. 34. JMSMessageID
  35. 35. JMSTimestamp
  36. 36. JMSExpiration
  37. 37. JMSRedelivered
  38. 38. JMSPriority </li></ul></ul><ul><li>Assignés par le dev. </li><ul><li>JMSReplyTo
  39. 39. JMSCorrelationID
  40. 40. JMSType </li></ul><li>Propriétés optionnelles </li><ul><li>JMSXGroupID
  41. 41. JMSXGroupSeq
  42. 42. JMSX... </li></ul></ul>
  43. 43. Structure d'un message: Header <ul><li>Assignés par le broker </li><ul><li>JMSDestination
  44. 44. JMSDeliverMode
  45. 45. JMSMessageID
  46. 46. JMSTimestamp
  47. 47. JMSExpiration
  48. 48. JMSRedelivered
  49. 49. JMSPriority </li></ul></ul><ul><li>Assignés par le dev. </li><ul><li>JMSReplyTo
  50. 50. JMSCorrelationID
  51. 51. JMSType </li></ul><li>Propriétés optionnelles </li><ul><li>JMSXGroupID
  52. 52. JMSXGroupSeq
  53. 53. JMSX... </li></ul></ul>
  54. 54. Structure d'un message: Header <ul><li>Assignés par le broker </li><ul><li>JMSDestination
  55. 55. JMSDeliverMode
  56. 56. JMSMessageID
  57. 57. JMSTimestamp
  58. 58. JMSExpiration
  59. 59. JMSRedelivered
  60. 60. JMSPriority </li></ul></ul><ul><li>Assignés par le dev. </li><ul><li>JMSReplyTo
  61. 61. JMSCorrelationID
  62. 62. JMSType </li></ul><li>Propriétés optionnelles </li><ul><li>JMSXGroupID
  63. 63. JMSXGroupSeq
  64. 64. JMSX... </li></ul></ul>
  65. 65. Types de message <ul><li>Message
  66. 66. TextMessage
  67. 67. ObjectMessage
  68. 68. BytesMessage
  69. 69. StreamMessage
  70. 70. MapMessage </li></ul>
  71. 71. Types de message <ul><li>Message
  72. 72. TextMessage
  73. 73. ObjectMessage
  74. 74. BytesMessage
  75. 75. StreamMessage
  76. 76. MapMessage </li></ul>
  77. 77. Types de message <ul><li>Message
  78. 78. TextMessage
  79. 79. ObjectMessage
  80. 80. BytesMessage
  81. 81. StreamMessage
  82. 82. MapMessage </li></ul>
  83. 83. Selector <ul><li>Filtrer selon le header et les propriétés </li><ul><li>OriginID like 'FrontOffice%' and (Price * 0.9)>500' </li></ul><li>Sous ensemble de SQL 92
  84. 84. Se positionne sur les consommateurs
  85. 85. Attention aux queues: Time-to-live! </li></ul>
  86. 86. Acknowledgement/Transaction <ul><li>AUTO_ACKNOWLEDGE
  87. 87. DUPS_OK_ACKNOWLEDGE
  88. 88. CLIENT_ACKNOWLDGE
  89. 89. SESSION_TRANSACTED </li></ul>
  90. 90. Acknowledgement Producteur Consom mateur persistence
  91. 91. Acknowledgement Producteur Consom mateur persistence
  92. 92. Acknowledgement Producteur Consom mateur persistence
  93. 93. Acknowledgement ack Producteur Consom mateur persistence
  94. 94. Acknowledgement Producteur Consom mateur persistence
  95. 95. Acknowledgement Producteur Consom mateur persistence
  96. 96. Acknowledgement Producteur Consom mateur persistence suppresion
  97. 97. Transaction côté producteur Producteur Consom mateur
  98. 98. Transaction côté producteur Producteur Consom mateur
  99. 99. Transaction côté producteur Producteur Consom mateur
  100. 100. Transaction côté producteur Producteur Consom mateur
  101. 101. Transaction côté producteur Producteur Consom mateur
  102. 102. Transaction côté consommateur Producteur Consom mateur
  103. 103. Transaction côté consommateur Producteur Consom mateur
  104. 104. Transaction côté consommateur Producteur Consom mateur
  105. 105. Transaction côté consommateur Producteur Consom mateur
  106. 106. Multi threading <ul><li>Multihread </li><ul><li>Destination
  107. 107. ConnectionFactory
  108. 108. Connection </li></ul></ul><ul><li>Mono-thread </li><ul><li>Session
  109. 109. MessageProducer
  110. 110. MessageConsumer </li></ul></ul>
  111. 111. Multithread sur une topic Subscriber 1 Subscriber 2 Subscriber 3 topic a b c a b c a b c a b c
  112. 112. Multithread sur une topic Subscriber 1 Subscriber 2 Subscriber 3 topic queue a b c a b c
  113. 113. Request/Reply request-queue reply-queue client server
  114. 114. Request/Reply request-queue reply-queue client server replyTo: reply-queue correlationId: messageID
  115. 115. Request/Reply request-queue reply-queue client server
  116. 116. Request/Reply request-queue reply-queue reply client server destination: reply-queue correlationId: messageID
  117. 117. Request/Reply request-queue reply-queue reply reply client server
  118. 118. Transport <ul><li>Protocoles </li><ul><li>TCP
  119. 119. NIO
  120. 120. UDP
  121. 121. HTTP </li></ul><li>Surcouche du broker (transport/sérialisation) </li><ul><li>Openwire (ActiveMQ)
  122. 122. Netty (HornetQ) </li></ul></ul>
  123. 123. Spring <!-- Spring jms template --> < bean id = &quot;jmsTemplate&quot; class = &quot;org.springframework. jms .core.JmsTemplate&quot; > < property name = &quot;connectionFactory&quot; ref = &quot;connectionFactory&quot; /> < property name = &quot;defaultDestinationName&quot; value = &quot;requestQueue&quot; /> < property name = &quot;sessionAcknowledgeModeName&quot; value = &quot;AUTO_ACKNOWLEDGE&quot; /> </ bean > <!-- Message listener for reply to the request --> < jms:listener-container connection-factory = &quot;connectionFactory&quot; destination-type = &quot;queue&quot; acknowledge = &quot;auto&quot; concurrency = &quot;1-10&quot; > < jms:listener destination = &quot;request.queue&quot; ref = &quot;server&quot; selector = &quot;X=4&quot; /> </ jms:listener-container > -> http://bsnyderblog.blogspot.com/2010/05/tuning-jms-message-consumption-in.html
  124. 124. Tests <ul><li>Propriétaires </li><ul><li>Pas de : new Message() </li></ul><li>Broker embarqué </li><ul><li>ActiveMQ et ?
  125. 125. Problème de ré-instanciation </li></ul><li>Pièges courants: </li><ul><li>connection.start()
  126. 126. Publier avant de souscrire
  127. 127. Ne pas purger les queues/topics
  128. 128. Read only/write only </li></ul><li>Des tests unitaires asynchrones ... </li></ul>
  129. 129. Le futur des brokers <ul><li>Ouvertures à de nouveaux protocoles </li><ul><li>STOMP
  130. 130. AMQP
  131. 131. WebSocket
  132. 132. Rest </li></ul></ul>

×