Java Message Services

Preview:

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.

Citation preview

JMS

Tour d’horizon

Agenda

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

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

Pourquoi JMS ?

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

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

Vocabulaire

Connection

Factory

Connection

Session

Message

Message Producer

Message Consum

er

Destination

crée

créecréecrée

crée

Envoie Recoit

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

Structure d’un message

Header JMS… JMSX… Properties

Payload

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)

Structure d’un messageHeader - JMSX

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

JMSXGroupID JMSXGroupSeq

Structure d’un messageHeader - Properties

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

Structure d’un messagePayload

Text Object Bytes Stream Map

Mode de communication

Publish / Subscribe Point to Point Filtrage Transaction

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

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

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″)}

)

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″);

Mode de communication Transactions

Emetteur Recepteur Groupes de messages Transactions distribuées

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

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

Mode de communication Transactions – Groupes de messages

2 propriétés JMSXGroupID JMSXGroupSeq

Spec floues

Mode de communication Transactions – Transactions distribuées

Optionnel Les mêmes avec XA

XAConnectionFactory XAQueueConnectionFactory XATopicConnectionFactory

XAConnection XAQueueConnection XATopicConnection

XASession XATopicSession XAQueueSession

Performances

Modes d’utilisation de JMS

MessageListener, Receiver MessageDrivenBean depuis EJB3 Spring REST

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

Modes d’utilisation de JMSMessageDrivenBean

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

Points d’attention

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

Infrastructure Architecture logicielle

Points d’attentionMessages - MDB

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

Transformation-routage

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);

Points d’attentionInfrastructure

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

Points d’attentionArchitecture logicielle

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

Futur de JMS

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

Questions

Recommended