Académique Documents
Professionnel Documents
Culture Documents
▪ Ce réseau est principalement utilisé pour transmettre des informations pour réaliser des
virements bancaires.
▪ En 2022, SWIFT a transmis plus de 12 milliards d’ordres de paiement dans le monde, avec un
pic journalier à plus de 55 millions.
▪ SWIFT est un intermédiaire facilitant le transport des messages contenant des instructions de
paiement entre les institutions financières impliquées dans une transaction.
▪ Les messages financiers ont le format standard ISO 200222 MX, ces types de messages
s’expriment en utilisant la syntaxe XML.
Whatsap /
Etude de cas : Swift (Society for Worldwide
Interbank Financial Telecommunication)
Catégorie de
Exemple
message
▪ La plateforme Swift est basée sur les concepts : MT1xx MT103 Single customer credit transfer
1. Transfert de fichier
4. Messagerie :
1. Entête « Header » et corps/contenu « PayLoad »
▪ Persistance des messages: Les messages présents dans les files d'attente
peuvent être sauvegardés sur un support physique pour en assurer la
conservation en cas de panne.
▪ Fiabilité: Chaque message envoyé par une application fait l'objet d'un
accusé de réception par le MOM.
Chaque application qui consomme un message envoie un accusé de
réception au MOM.
Couplé avec la persistance, ce mécanisme permet de garantir qu'aucun
message ne sera perdu dans son transfert entre les applications.
EAI : Middleware Oriented Message(MOM)
✓ Principes de fonctionnement:
1. Point à point : une application produit des messages et une application les
consomme. Les messages ne sont lus que par un seul consommateur. Une fois
envoyés à ce topic restent dans la file d'attente jusqu'à ce que toutes les
• https://www.oracle.com/java/technologies/java-message-service.html
• https://javaee.github.io/openmq/
L’API JMS
▪ L'API Jakarta Messaging (anciennement Java Message Service ou JMS API) est une
interface de programmation d'application (API) Java pour les middlewares orientés
messages.
▪ Elle fournit des modèles de messagerie génériques, capables de gérer les problèmes
de publish-subscriber, la communication Asynchrone, et la fiabilité de délivrance des
messages
▪ JMS fait partie de Jakarta EE à partir de la version 1.3 de JEE.
▪ JMS peut accéder aux différents MOM : Active MQ, KAFKA, Rabbit MQ, IBM MQ…
▪ Versions de l'API JMS:
▪ JMS 1.0.1 (October 5, 1998)
▪ JMS 1.1 (April 12, 2002)
▪ JMS 2.0 (May 21, 2013)
▪ JMS 2.0a (March 16, 2015)
L’API JMS : Les éléments JMS
1.JMS Provider: Une implémentation de l'interface JMS pour les (MOM). Les Providers
2. JMS Client: Une application ou un processus qui produit et/ou reçoit des messages.
5. JMS Message : Objet qui contient les données transférées entre les clients JMS.
6. JMS Queue: Une zone de transfert qui contient les messages qui ont été envoyés et qui
attendent d'être lus (par un seul consommateur). Une file d'attente JMS garantit que chaque
▪ JMS Topic: Un mécanisme de distribution pour publier des messages envoyés à plusieurs
abonnés.
Les Protocoles de Communication
Le Protocole point-à-point (Queue)
• Le principe des filtres (selector) est valable pour les Topic également.
La consommation des messages
Le modèle de programmation JMS
Le modèle de programmation JMS
• L’interface jakarta.jms.ConnectionFactory
Le modèle de programmation JMS
• L’interface jakarta.jms.Connection
Le modèle de programmation JMS
• L’interface jakarta.jms.Session
Le modèle de programmation JMS
• L’interface jakarta.jms.MessageProducer
L’interface jakarta.jms.MessageConsumer
Le modèle de programmation JMS
• Synthèse des principaux Interfaces de JMS :
• JMS 1.1
• JMS 2.0
Le modèle de programmation JMS
1.jakarta.jms : Ce package et ses sous−packages contiennent plusieurs interfaces qui
définissent l’API: Factory, Connection, Session, Message, MessageProducer,
MessageListener
▪ Pour obtenir un objet de ce type, il faut soit instancier directement un tel objet soit faire appel
à JNDI pour l'obtenir. Cette dernière solution est préférable car elle est plus portable.
▪ Chaque provider fournit sa propre solution pour gérer les objets contenus dans l'annuaire
JNDI.
Le modèle de programmation JMS
3.L'interface Connection :
▪ Pour obtenir l'un ou l'autre, il faut utiliser un objet de type Factory correspondant au type
QueueConnectionFactory ou TopicConnectionFactory avec la méthode correspondante :
createQueueConnection() ou createTopicConnection().
▪ C'est à partir d'un objet session que l'on crée des messages et des objets à envoyer et à
recevoir.
▪ Comme pour la connexion, la création d'un objet de type Session dépend du mode de
fonctionnement. L'interface Session possède deux interfaces filles :
▪ Pour obtenir l'un ou l'autre, il faut utiliser un objet Connection correspondant de type
QueueConnection ou TopicConnection avec sa méthode associée : createQueueSession() ou
createTopicSession().
▪ Ces deux méthodes demandent deux paramètres : un booléen qui indique si la session gère
une transaction et une constante qui précise le mode d'accusé de réception des messages.
Le modèle de programmation JMS
4. L'interface Session
▪ Les messages sont considérés comme traités par le MOM à la réception d'un accusé
de réception. Celui−ci est fourni au MOM selon le mode utilisé. Il existe trois modes
d'accusés de réception (trois constantes sont définies dans l'interface Session) :
▪ Il existe aussi pour chaque format des interfaces filles de l'interface Message :
Le modèle de programmation JMS
Le modèle de programmation JMS
Le modèle de programmation JMS
Le modèle de programmation JMS
Le modèle de programmation JMS
5. L'envoi de messages
synchrone : dans ce cas, l'attente d'un message bloque l'exécution du reste du code
asynchrone : dans ce cas, un thread est lancé qui attend le message et appelle une
méthode (callback) à son arrivée. L'exécution de l'application n'est pas bloquée.
▪ Pour obtenir un objet qui implémente l'interface QueueReceiver, il faut utiliser la méthode
createReceiver() d'un objet de type QueueSession.
▪ Pour obtenir un objet qui implémente l'interface TopicSubscriber, il faut utiliser la méthode
createSubscriber() d'un objet de type TopicSession.
Le modèle de programmation JMS
6. La réception de messages
▪ Transactionnel ?
▪ Les classes de Spring dédiées à la mise en œuvre de JMS sont dans le package
org.springframework.jms.
manière synchrone
paramètre.
▪ Remarque : La classe JmsTemplate peut être utilisée pour envoyer des messages mais elle
n'est pas recommandée pour en recevoir. Pour la réception d'un message, il est préférable
d'utiliser une solution asynchrone reposant sur un MessageListener de Spring.
Implémentation de JMS avec Spring
▪ https://www.youtube.com/watch?v=j5qf5YDtOeA
Active MQ
https://activemq.apache.org/
Exemple de Code pour un Consumer JMS
https://activemq.apache.org/
Exemple de Code pour un Consumer JMS
Simple Producer JMS
Simple Producer JMS
Simple Producer JMS
KAFKA : une plateforme pour la gestion des flux
• Apache Kafka est une plateforme de streaming qui répond aux besoins et défis de la Big
Data en termes de traitement temps réel d’une grande quantité de données de manière
distribuée.
1. Topic: Un flux de messages appartenant à une catégorie particulière. Les données sont
stockées dans des topics.
2. Partitions: Chaque topic est divisé en partitions. Pour chaque topic, Kafka conserve un
minimum d'une partition. Chaque partition contient des messages dans une séquence
ordonnée immuable. Une partition est implémentée comme un ensemble de segments de
tailles égales.
3. Offset: Les enregistrements d'une partition ont chacun un identifiant séquentiel appelé offset,
qui permet de l'identifier de manière unique dans la partition.
4. Répliques: Les répliques sont des backups d'une partition. Elles ne sont jamais lues ni
modifiées par les acteurs externes, elles servent uniquement à prévenir la perte de données.
5. Brokers: Les brokers (ou courtiers) sont des systèmes responsables de maintenir les données
publiées. Chaque nroker peut avoir zéro ou plusieurs partitions par topic. Si un topic admet N
partitions et N broker, chaque broker va avoir une seule partition. Si le nombre de brokers est
plus grand que celui des partitions, certains n'auront aucune partition de ce topic.
Architecture KAFKA
6. Cluster: Un système Kafka ayant plus qu'un seul Broker est appelé cluster Kafka. L'ajout de
nouveau brokers est fait de manière transparente sans temps d'arrêt.
7. Producers: Les producteurs sont les éditeurs de messages à un ou plusieurs topics Kafka. Ils
envoient des données aux brokers Kafka. Chaque fois qu'un producteur publie un message à
un broker, ce dernier rattache le message au dernier segment, ajouté ainsi à une partition. Un
producteur peut également envoyer un message à une partition particulière.
8. Consumers: Les consommateurs lisent les données à partir des brokers. Ils souscrivent à un
ou plusieurs topics, et consomment les messages publiés en extrayant les données à partir des
brokers.
9. Leaders: Le leader est le nœud responsable de toutes les lectures et écritures d'une partition
donnée. Chaque partition a un serveur jouant le rôle de leader.
10.Follower: C'est un nœud qui suit les instructions du leader. Si le leader tombe en panne, l'un
des followers deviendra automatiquement le nouveau leader
Architecture KAFKA
La figure suivante montre un exemple de flux entre les différentes parties d'un système Kafka:
Cluster Kafka
Offset « enrg_id1 »
Offset « enrg_id2 »
Architecture KAFKA
créer trois répliques identiques de chaque partition et les placer dans le cluster
• Pour équilibrer la charge dans le cluster, chaque broker stocke une ou plusieurs
de ces partitions.
au même moment.
KAFKA et ZooKeeper
• Zookeeper est un service centralisé permettant de maintenir l'information de
configuration, de nommage, de synchronisation et de services de groupe.
• Ces services sont utilisés par les applications distribuées en général, et par Kafka
en particulier. Pour éviter la complexité et difficulté de leur implémentation
manuelle, Zookeeper est utilisé.
KAFKA et ZooKeeper
• Un cluster Kafka consiste typiquement en plusieurs courtiers (Brokers) pour
maintenir la répartition de charge.
• Ces Brokers sont stateless, c'est pour cela qu'ils utilisent Zookeeper pour
maintenir l'état du cluster.
Java Server Pages Standard Tag Libray (JSTL) 1.2 1.2 1.2
destination = (Destination)
context.lookup("topic1");
• Les applications par lots (BATCH) fournissent un modèle de programmation pour les applications par
• L'API Java BATCH définie dans JEE 7 (JSR 352) a pour vocation de permettre l'exécution de jobs (ou
traitements batch) dans le contexte d'une application JEE et donc d'un serveur d'application (Glassfish,
JBOSS,…)
• Elle permet entre autres de définir des checkpoints, de supporter les transactions, elle permet aussi de
• Elle s'intègre à JEE et peut profiter, par exemple, des fonctionnalités des serveurs d'application : injection
RAPPEL
Apache Tomcat : c’est un Conteneur Web. Il permet d’exécuter uniquement les JSP/Servlet et
JSF. Apache Tomcat contient un serveur Web Apache. On l’appel le serveur web intégré.
Apache : C’est un Serveur Web qui répond aux requêtes HTTP/HTTPS et sert des ressources
statiques (html,js,jpg,css….). Pour que Apache sert des ressources dynamiques on lui ajoute la
notion de Plugin ( Plugin php, plugin ajp Apache Java Protocole pour servir des jsp/Servlet ….)
Exemple d’Architecture distribuée hautement disponible et Résiliente
API-REST/JSON