jms.back.to.basic
TRANSCRIPT
JMS
Back
To
Basic
Un peu histoire
Une API guide par les entreprises
JSR 914JMS 1.0.2b: juin 2001
JMS 1.1: mars 2002
JSR 343: JMS 2 dans JavaEE 7
Implmentations
Serveurs d'applications: standard JEE
Constructeurs payants:Websphere MQ aka MQ Series
Tibco EMS
Sonic MQ (Progress Software)
Fiorano MQ
Swift MQ
Constructeurs gratuits:OpenMQ (Sun/Oracle)
ActiveMQ
HornetQ aka Jboss Messaging
JORAM (JOnAS)
Une API simple
ConnectionFactoryConnectionSessionMessageConsumerMessageMessageProducer
Destination
Objets JMS administrs via JNDI
Domaines
2 types de domainePoint-to-point: Queue
Publish/subscribe: TopicNon durable
Durable: ClientId
Store-and-forwardPersistence
Une API redondante ?
Queue ConnectionFactoryQueue ConnectionQueueSessionQueueSenderMessageQueueReceiver
Queue
Objets JMS administrs via JNDI
Une API redondante ?
Topic ConnectionFactoryTopic ConnectionTopicSessionTopicSenderMessageTopicReceiver
Topic
Objets JMS administrs via JNDI
Structure d'un message
HeaderPropritsPayload
Structure d'un message: Header
Assigns par le brokerJMSDestination
JMSDeliverMode
JMSMessageID
JMSTimestamp
JMSExpiration
JMSRedelivered
JMSPriority
Assigns par le dev.JMSReplyTo
JMSCorrelationID
JMSType
Proprits optionnelsJMSXGroupID
JMSXGroupSeq
JMSX...
Structure d'un message: Header
Assigns par le brokerJMSDestination
JMSDeliverMode
JMSMessageID
JMSTimestamp
JMSExpiration
JMSRedelivered
JMSPriority
Assigns par le dev.JMSReplyTo
JMSCorrelationID
JMSType
Proprits optionnellesJMSXGroupID
JMSXGroupSeq
JMSX...
Structure d'un message: Header
Assigns par le brokerJMSDestination
JMSDeliverMode
JMSMessageID
JMSTimestamp
JMSExpiration
JMSRedelivered
JMSPriority
Assigns par le dev.JMSReplyTo
JMSCorrelationID
JMSType
Proprits optionnellesJMSXGroupID
JMSXGroupSeq
JMSX...
Structure d'un message: Header
Assigns par le brokerJMSDestination
JMSDeliverMode
JMSMessageID
JMSTimestamp
JMSExpiration
JMSRedelivered
JMSPriority
Assigns par le dev.JMSReplyTo
JMSCorrelationID
JMSType
Proprits optionnellesJMSXGroupID
JMSXGroupSeq
JMSX...
Types de message
Message
TextMessage
ObjectMessage
BytesMessage
StreamMessage
MapMessage
Types de message
Message
TextMessage
ObjectMessage
BytesMessage
StreamMessage
MapMessage
Types de message
Message
TextMessage
ObjectMessage
BytesMessage
StreamMessage
MapMessage
Selector
Filtrer selon le header et les propritsOriginID like 'FrontOffice%' and (Price * 0.9)>500'
Sous ensemble de SQL 92
Se positionne sur les consommateurs
Attention aux queues: Time-to-live!
Acknowledgement/Transaction
AUTO_ACKNOWLEDGE
DUPS_OK_ACKNOWLEDGE
CLIENT_ACKNOWLDGE
SESSION_TRANSACTED
Acknowledgement
brokerProducteurConsommateurpersistence
Acknowledgement
brokerProducteurConsommateurpersistenceenvoie
Acknowledgement
brokerProducteurConsommateurpersistence
Acknowledgement
brokerProducteurConsommateurpersistence
ack
Acknowledgement
brokerProducteurConsommateurpersistence
Acknowledgement
brokerProducteurConsommateurpersistence
Acknowledgement
brokerProducteurConsommateurpersistence
suppresion
Transaction ct producteur
brokerProducteurConsommateur
Transaction ct producteur
brokerProducteurConsommateurenvoie
Transaction ct producteur
brokerProducteurConsommateurenvoie
envoie
Transaction ct producteur
brokerProducteurConsommateurenvoie
envoie
commit
Transaction ct producteur
brokerProducteurConsommateurenvoie
envoie
commit
reoit
Transaction ct consommateur
brokerProducteurConsommateur
Transaction ct consommateur
brokerProducteurConsommateurenvoie
envoie
Transaction ct consommateur
brokerProducteurConsommateurreoit
reoit
Transaction ct consommateur
brokerProducteurConsommateurreoit
reoit
commit
Multi threading
MultihreadDestination
ConnectionFactory
Connection
Mono-threadSession
MessageProducer
MessageConsumer
Multithread sur une topic
abc
abcabcabc
Subscriber 1
Subscriber 2
Subscriber 3
topic
Multithread sur une topic
abc
abc
Subscriber 1
Subscriber 2
Subscriber 3
topic
queue
Request/Reply
clientserver
request-queue
reply-queue
Request/Reply
clientserver
request-queue
reply-queue
request
replyTo: reply-queuecorrelationId: messageID
Request/Reply
clientserver
request-queue
reply-queue
request
request
Request/Reply
clientserver
request-queue
reply-queue
request
destination: reply-queuecorrelationId: messageIDrequest
reply
Request/Reply
clientserver
request-queue
reply-queue
request
request
reply
reply
Transport
ProtocolesTCP
NIO
UDP
HTTP
Surcouche du broker (transport/srialisation)Openwire (ActiveMQ)
Netty (HornetQ)
Spring
http://bsnyderblog.blogspot.com/2010/05/tuning-jms-message-consumption-in.html
Tests
PropritairesPas de : new Message()
Broker embarquActiveMQ et ?
Problme de r-instanciation
Piges courants:connection.start()
Publier avant de souscrire
Ne pas purger les queues/topics
Read only/write only
Des tests unitaires asynchrones ...
Le futur des brokers
Ouvertures de nouveaux protocolesSTOMP
AMQP
WebSocket
Rest
Cliquez pour diter le format du plan de texteSecond niveau de planTroisime niveau de planQuatrime niveau de planCinquime niveau de planSixime niveau de planSeptime niveau de planHuitime niveau de planNeuvime niveau de plan