AMQP (pour Advanced Message Queuing Protocol) est un protocole ouvert pour les systèmes de messagerie orientés intergiciel initialement développé par la banque JPMorgan Chase[1]. L'objectif d'AMQP est de standardiser les échanges entre serveurs de messages en se basant sur les principes suivants : orienté message, utilisation de files d'attente, routage (point à point et publish-subscribe), fiabilité et sécurité.
Les spécifications d'AMQP ont été écrites par un consortium international qui inclut entre autres Red Hat, Cisco Systems, IONA (en), iMatix et d’autres acteurs[2].
Avant AMQP, les efforts de standardisation des intergiciels avaient surtout porté sur les interfaces de programmation API comme Java Message Service sans aboutir à une interopérabilité effective entre les différents systèmes. Contrairement à JMS qui définit une API, AMQP est un protocole wire-level ; c'est-à-dire qu'il décrit le format des données qui sont envoyées sur le réseau sous forme de flux d'octets. En conséquence, tout programme qui peut créer et interpréter des messages se conformant à ce format peut interagir avec tout autre outil, quels que soient les langages utilisés.
Aperçu
AMQP est un protocole binaire de couche application, conçu pour supporter efficacement une grande variété d’applications de messagerie et de modèles de communication. Il fournit une communication orientée message avec contrôle de flux[3], des garanties de livraison telles que au plus une fois (chaque message est livré une fois ou jamais), au moins une fois (chaque message est livré au moins une fois, mais peut l’être plusieurs fois) et exactement une fois (chaque message est toujours livré une seule fois)[4], ainsi que l’authentification et/ou le chiffrement basés sur SASL et TLS[5]. Il repose sur une couche de transport fiable telle que TCP [6].
La spécification AMQP est structurée en plusieurs couches : un système de types, un protocole symétrique et asynchrone pour le transfert de messages, un format standard et extensible de message, et un ensemble de capacités de messagerie standardisées et extensibles.
Histoire
Le protocole AMQP a été initié en 2003 par John O’Hara chez JPMorgan Chase à Londres[7]. De mi-2004 à mi-2006, JPMorgan Chase a piloté la conception initiale d’AMQP, mandatant la société iMatix pour développer un broker en langage C et rédiger la documentation formelle du protocole. Afin d’ouvrir et standardiser la technologie, JPMorgan Chase a ensuite créé en 2005 un groupe de travail réunissant plusieurs acteurs majeurs de l’informatique et des télécommunications, notamment Cisco Systems, IONA Technologies, Red Hat, TWIST et iMatix.
En 2005, JPMorgan Chase et Red Hat ont initié le projet Apache Qpid. Indépendamment, RabbitMQ a été développé en Erlang par Rabbit Technologies.
En 2011, le groupe de travail AMQP s’est réorganisé au sein de l’OASIS, qui a publié AMQP 1.0 en octobre 2011. La norme a ensuite été adoptée par l’ISO et la CEI en avril 2014 sous la désignation ISO/IEC 19464.
Implémentations
Les principales implémentations d’AMQP 1.0 incluent :
- Apache Qpid (en)
- Apache ActiveMQ Artemis (en)
- Microsoft Azure Service Bus et Azure Event Hubs
- IBM MQ
- Solace PubSub+
- RabbitMQ (à partir de la version 4.0, support d’AMQP 1.0[8])
Les versions antérieures (0-8, 0-9, 0-9-1, 0-10) sont encore largement utilisées, notamment via RabbitMQ, mais sont incompatibles avec AMQP 1.0.
Spécification
AMQP 1.0 met l’accent sur l’interopérabilité à grande échelle avec une architecture modulaire et un protocole plus flexible. Il définit un ensemble minimal mais robuste de fonctionnalités permettant la communication entre pairs, sans imposer un modèle serveur strict (contrairement à AMQP 0.9.1 qui repose fortement sur un modèle broker avec exchanges, queues et bindings intégrés). AMQP 1.0 sépare les couches du protocole (types, transport, messagerie, transactions, sécurité) ce qui permet une extensibilité et une adaptation selon les implémentations.
En comparaison, les versions antérieures (comme AMQP 0.9.1[9]) présentent plus de fonctionnalités spécifiques au routage (exchanges, bindings) mais sont moins homogènes et moins interopérables à large échelle.
Protocoles comparables
Voir aussi
Liens externes
- AMQP
- Apache Qpid
- RabbitMQ
- OpenAMQ
- ØMQ
Notes et références
- ↑ Article sur AMQP et la Banque JPMorgan sur 01net.com en 2008
- ↑ (en) « Members », sur amqp.org (consulté le )
- ↑ « OASIS Advanced Message Queuing Protocol (AMQP) Version 1.0, Part 2: Transport », sur docs.oasis-open.org (consulté le )
- ↑ « OASIS AMQP version 1.0, sections 2.6.12-2.6.13 », OASIS) AMQP Technical Committee (consulté le )
- ↑ (en) « OASIS AMQP version 1.0, section 5.1 », OASIS) AMQP Technical Committee]
- ↑ « OASIS AMQP version 1.0, section 2.1 », OASIS) AMQP Technical Committee (consulté le )
- ↑ Pieter Hintjens, « Background to the AMQ Project », iMatix Corporation, (consulté le )
- ↑ (en) « AMQP 1.0 | RabbitMQ », sur www.rabbitmq.com (consulté le )
- ↑ (en-US) VMware Tanzu Team, « Native AMQP 1.0 », sur Tanzu, (consulté le )