MOM (Message-Oriented Middleware)

Références

L'actualité

Librairie

L'information

MOM > MOM (Message-Oriented Middleware)

Le terme message-oriented middleware (MOM), désigne une famille de logiciels qui permettent l'échange de messages entre les applications présentes sur un réseau informatique. Les MOM font partie des éléments techniques de base des architectures informatiques. Ils permettent une forme de couplage faible entre applications.

Caractéristiques

  • Transport de messages. Les messages comportent deux parties: l'en-tête technique, utilisée par le MOM et les données qui peuvent être dans n'importe quel format.
  • Communication asynchrone. L'application émettrice d'un message et l'application réceptrice du message n'ont pas besoin d'être actives en même temps. La file d'attente reçoit le message de l'application émettrice et le stocke jusqu'à ce que l'application réceptrice vienne lire le message.
  • Routage. Les messages peuvent être routés entre MOM. Par exemple, pour router un message entre deux sites distants disposant chacun d'un MOM installé localement.
  • Transformation des données. La plupart des MOM permettent de changer le format des données contenues dans les messages pour les adapter à l'application réceptrice. Cette capacité est proche de celle des outils d'EAI (enterprise application integration) dont ils constituent parfois le noyau.
  • 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.
Principes de fonctionnement

Les MOM ont deux modes de fonctionnement principaux :

  • Point à point : une application produit des messages et une application les consomme. Les messages ne sont lus que par un seul consommateur. Une fois qu'un message est lu, il est retiré de la file d'attente.
  • Publish-subscribe (par abonnement) : les applications consommatrices des messages s'abonnent à un topic (sujet, catégorie de messages). Les messages envoyés à ce topic restent dans la file d'attente jusqu'à ce que toutes les applications abonnées aient lu le message.


MOM > RabbitMQ

RabbitMQ est un logiciel d'agent de messages open source qui implémente le protocole Advanced Message Queuing (AMQP), mais aussi avec des plugins Streaming Text Oriented Messaging Protocol (STOMP) et Message Queuing Telemetry Transport (MQTT). Le serveur RabbitMQ est écrit dans le langage de programmation Erlang.

Le projet est constitué de :

   
  • Un serveur d'échange RabbitMQ.
  • Des passerelles pour protocoles AMQP, HTTP, STOMP, et MQTT.
  • Des bibliothèques de client AMQP pour Java, .NET Framework, et Erlang (mais d'autres ont été développés par de tiers).
  • Une plateforme de plugin avec une collection prédéfinie, incluant :
    • "Shovel" : réplication de messages entre les agents de messages.
    • "Federation" : partage de messages entre les agents (au niveau exchange).
    • "Management" : monitoring et contrôle des agents et de leurs groupes.


MOM > Kafka

Apache Kafka est un projet à code source ouvert d'agent de messages développé par l'Apache Software Foundation et écrit en Scala. Le projet vise à fournir un système unifié, en temps réel à latence faible pour la manipulation de flux de données. Sa conception est fortement influencée par les journaux de transactions.

Kafka est utilisé principalement pour la mise en place de "data pipeline" temps réel mais ce n'est pas sa seule application possible dans le monde de l'entreprise.

   
Il est aussi de plus en plus utilisé dans les architectures micro services comme système d'échange, dans la supervision temps réel et dans l'IOT. Kafka apporte sa capacité à ingérer et diffuser une grande quantité de données, couplé à un framework de data stream processing, il permet le traitement complexe et en temps réel des données.