Java Message Services

31
JMS Tour d’horizon

description

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.

Transcript of Java Message Services

Page 1: Java Message Services

JMS

Tour d’horizon

Page 2: Java Message Services

Agenda

Présentation Pourquoi JMS ? Structure d’un message Modes de communications Modes d’utilisation de JMS Points d’attention Futur de JMS Questions

Page 3: Java Message Services

Présentation

API ancienne (1.1 en 2002) Permettre l’échange de message Découplage lâche Portage de MQSeries et donc interaction

avec les gros systèmes

Page 4: Java Message Services

Pourquoi JMS ?

Intégration d’environnements hétérogènes

Réduction des bottlenecks Améliorer la scalabilité Flexibilité de l’architecture

Page 5: Java Message Services

Vocabulaire

Connection

Factory

Connection

Session

Message

Message Producer

Message Consum

er

Destination

crée

créecréecrée

crée

Envoie Recoit

Page 6: Java Message Services

Vocabulaire

Message

Header

Payload

Objet Mode P2P Mode PubSub

Destination Queue Topic

ConnectionFactory

QueueConnectionFactory

TopicConnectionFactory

Connection QueueConnection

TopicConnection

Session QueueSession TopicSession

MessageConsumer

QueueReceiver TopicSubscriber

MessageProducer

QueueSender TopicPublisher

Page 7: Java Message Services

Structure d’un message

Header JMS… JMSX… Properties

Payload

Page 8: Java Message Services

Structure d’un messageHeader - JMS

Champs pré-remplis JMSDestination (queue ou topic) JMSDeliveryMode (persistent ou non) JMSMessageID JMSTimestamp JMSExpiration JMSRedelivered JMSPriority

Champs à remplir JMSReplyTo JMSCorrelationID JMSType (type de message, dépendant du MOM)

Page 9: Java Message Services

Structure d’un messageHeader - JMSX

Spécifique au provider 2 propriétés pour grouper des messages

JMSXGroupID JMSXGroupSeq

Page 10: Java Message Services

Structure d’un messageHeader - Properties

Type primitif Libre Filtrable Définissable uniquement avant l’envoie

Page 11: Java Message Services

Structure d’un messagePayload

Text Object Bytes Stream Map

Page 12: Java Message Services

Mode de communication

Publish / Subscribe Point to Point Filtrage Transaction

Page 13: Java Message Services

Mode de communication Publish - Subscribe

Type twitter Un message pour

plusieurs destinataires Destinataires non

connus Messages éphémères Les destinataires

reçoivent une copie du message

Page 14: Java Message Services

Mode de communication Point to Point

Echange via une Queue 1 émetteur – 1 recepteur 1 seul récepteur même si

plusieurs listeners On consomme toujours le

1er message Communication

asynchrone Fire-and-forget Request-reply

correlationID Acknowledge

Page 15: Java Message Services

Mode de communication Filtrage

Sur le receiver

Sur le MDB Xml

Annotation

receiver = session.createReceiver(queue, filter)

<messageSelector>filter</messageSelector>

@MessageDriven(…activationConfig={@ActivationConfigProperty(propertyName= ″messageSelector″,propertyValue= ″filter″)}

)

Page 16: Java Message Services

Mode de communication Filtrage - syntaxe

Syntaxe SQL like Opérateurs arithmétiques

+,-,*,/ <, >, <=, >=, =

Opérateurs logiques and , or, like, between, in, not, is null

ExempleFilter = String.format(″JMSCorrelationID=‘%1$s’ and myPoperty=’%2$s’ ″,

message.getJMSMessageID(), ″uneValeurPertinente″);

Page 17: Java Message Services

Mode de communication Transactions

Emetteur Recepteur Groupes de messages Transactions distribuées

Page 18: Java Message Services

Mode de communication Transactions - Emetteur

L’émetteur envoie son message au MOM Le MOM garanti la persistance du

message Possibilité de commit après plusieurs

envois

Page 19: Java Message Services

Mode de communication Transactions - Récepteur

Un message n’est consommé qu’une fois Mode de transaction

Auto-acknowledge Client-acknowledge

Redelivery Dead-letter queue

Page 20: Java Message Services

Mode de communication Transactions – Groupes de messages

2 propriétés JMSXGroupID JMSXGroupSeq

Spec floues

Page 21: Java Message Services

Mode de communication Transactions – Transactions distribuées

Optionnel Les mêmes avec XA

XAConnectionFactory XAQueueConnectionFactory XATopicConnectionFactory

XAConnection XAQueueConnection XATopicConnection

XASession XATopicSession XAQueueSession

Performances

Page 22: Java Message Services

Modes d’utilisation de JMS

MessageListener, Receiver MessageDrivenBean depuis EJB3 Spring REST

Page 23: Java Message Services

Modes d’utilisation de JMSMessageListener - Receiver

Traitement de la queue à la demande Contrôle plus fin On doit gérer le processing des queues à

la main Attention aux threads

Page 24: Java Message Services

Modes d’utilisation de JMSMessageDrivenBean

Depuis EJB3 Configurable par xml/annotation Scale automatiquement Se gère via JMX

Page 25: Java Message Services

Points d’attention

Messages Utilisation de MDB Propriétés auto-settées

Infrastructure Architecture logicielle

Page 26: Java Message Services

Points d’attentionMessages - MDB

Message façade : traite des messages et en réémet en réponse

Transformation-routage

Page 27: Java Message Services

Points d’attentionMessages - Propriétés

TextMessage msg = session.createTextMessage();msg.setText(″blabla″);msg.setJMSExpiration(System.getcurrentTimeMillis()+3600000);QueueSender sender = session.createSender(queue);sender.setTimeToLive(3600000);sender.send(msg);

Page 28: Java Message Services

Points d’attentionInfrastructure

MOM embarqué ou stand-alone Sécurité : communication ou message

Page 29: Java Message Services

Points d’attentionArchitecture logicielle

Une Queue par type de message Mauvaise gestion des priorités Monitoring des queues

Page 30: Java Message Services

Futur de JMS

Meilleure interopérabilité Spec de la v2 sont à l’étude AMQP

Page 31: Java Message Services

Questions