# Message-oriented middleware

Le terme message-oriented middleware (MOM), intergiciel à messages en français, 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.

## Normalisation

Dans le monde Java, l'API Java Message Service est la norme pour accéder aux fonctionnalités des MOM.
Au niveau protocole :
* AMQP (Advanced Message Queuing Protocol) définit un protocole sécurisé, fiable et ouvert pour les MOMs, c'est un standard OASIS depuis Octobre 2012, approuvé par l'ISO depuis mai 2014.
* MQTT (MQ Telemetry Transport) offre un protocole publish-subscribe adapté à la communication dans un contexte M2M et IoT où une faible empreinte et une économie de la bande passante sont nécessaires. MQTT est un standard OASIS depuis novembre 2014, approuvé par l'ISO depuis janvier 2016.

## Liste de MOM
### Open-source

Liste de MOM open-source (non exhaustive) :
* ActiveMQ (Apache Software Foundation)
* Solace
* Apollo (Apache Software Foundation)
* Disque
* FFMQ
* HornetMQ (Jboss)
* JBoss Messaging (JBoss)
* JORAM (OW2)
* Kafka (Apache Software Foundation)
* Pulsar (Apache Software Foundation)
* OpenAMQ (Imatix)
* OpenJMS (OpenJMS Group)
* OpenMQ(Java GlassFish)
* QPID (Apache Software Foundation)
* RabbitMQ (AMQP)
* ZeroMQ (Imatix)

### Propriétaires

Liste de MOM propriétaires (non exhaustive) :
* IBM WebSphere MQ
* JoramMQ de ScalAgent DT
* MSMQ de Microsoft
* EntireX de Software AG
* TIBCO Rendezvous, TIBCO EMS de Tibco Software
* Synchrony Messaging d'Axway
* SonicMQ de Progress Software