jms.back.to.basic

Download Jms.back.to.basic

If you can't read please download the document

Upload: guillaume-arnaud

Post on 16-Apr-2017

1.122 views

Category:

Technology


1 download

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