El Protocolo de cola de mensajes avanzado ( AMQP ) es un protocolo de capa de aplicación estándar abierto para middleware orientado a mensajes . Las características definitorias de AMQP son la orientación de los mensajes, las colas, el enrutamiento (incluido el punto a punto y la publicación y suscripción ), la confiabilidad y la seguridad. [1]
AMQP exige el comportamiento del proveedor de mensajería y el cliente en la medida en que las implementaciones de diferentes proveedores sean interoperables , de la misma manera que SMTP , HTTP , FTP , etc. han creado sistemas interoperables. Las estandarizaciones anteriores de middleware se han producido a nivel de API (por ejemplo, JMS ) y se centraron en estandarizar la interacción del programador con diferentes implementaciones de middleware, en lugar de proporcionar interoperabilidad entre múltiples implementaciones. [2] A diferencia de JMS, que define una API y un conjunto de comportamientos que debe proporcionar una implementación de mensajería, AMQP es un protocolo a nivel de cable.. Un protocolo a nivel de cable es una descripción del formato de los datos que se envían a través de la red como un flujo de bytes . En consecuencia, cualquier herramienta que pueda crear e interpretar mensajes que se ajusten a este formato de datos puede interoperar con cualquier otra herramienta compatible, independientemente del lenguaje de implementación.
Descripción general
AMQP es un protocolo de capa de aplicación binario , diseñado para admitir de manera eficiente una amplia variedad de aplicaciones de mensajería y patrones de comunicación. Proporciona una comunicación orientada a mensajes [3] controlada por flujo con garantías de entrega de mensajes como, por ejemplo, como máximo una vez (donde cada mensaje se envía una vez o nunca), al menos una vez (donde es seguro que se entregará cada mensaje, pero puede hacerlo varias veces) y exactamente una vez (donde el mensaje siempre llegará y lo hará solo una vez), [4] y autenticación y / o encriptación basada en SASL y / o TLS . [5] Asume un protocolo de capa de transporte confiable subyacente como el Protocolo de control de transmisión (TCP). [6]
La especificación AMQP se define en varias capas: (i) un sistema de tipos, (ii) un protocolo simétrico y asíncrono para la transferencia de mensajes de un proceso a otro, (iii) un formato de mensaje estándar y extensible y (iv) un conjunto de 'capacidades de mensajería' estandarizadas pero extensibles.
Historia
AMQP fue creado en 2003 por John O'Hara en JPMorgan Chase en Londres . [1] [7] AMQP se concibió como un esfuerzo cooperativo abierto. El diseño inicial fue realizado por JPMorgan Chase desde mediados de 2004 hasta mediados de 2006 y contrató a iMatix Corporation para desarrollar un agente C y la documentación del protocolo. En 2005, JPMorgan Chase se acercó a otras empresas para formar un grupo de trabajo que incluía Cisco Systems , IONA Technologies , iMatix, Red Hat y el Equipo de estándares de innovación de flujo de trabajo de transacciones (TWIST). En el mismo año, JPMorgan Chase se asoció con Red Hat para crear Apache Qpid , inicialmente en Java y poco después en C ++. Independientemente, RabbitMQ fue desarrollado en Erlang por Rabbit Technologies, seguido más tarde por las implementaciones de Microsoft y StormMQ .
El grupo de trabajo creció a 23 empresas, incluidas Bank of America , Barclays , Cisco Systems, Credit Suisse , Deutsche Börse , Goldman Sachs , HCL Technologies Ltd , Progress Software , IIT Software , INETCO Systems Limited , Informatica (incluida 29 West), JPMorgan Chase, Microsoft Corporation , my-Channels, Novell , Red Hat , Software AG , Solace Systems , StormMQ , Tervela Inc. , TWIST Process Innovations ltd, VMware (que adquirió Rabbit Technologies) y WSO2 .
En agosto de 2011, el grupo de trabajo AMQP anunció su reorganización en una sección de miembros de OASIS . [8]
AMQP 1.0 fue lanzado por el grupo de trabajo AMQP el 30 de octubre de 2011, en una conferencia en Nueva York. En el evento, Microsoft, Red Hat, VMware , Apache, INETCO e IIT Software demostraron el software que ejecuta el protocolo en una demostración de interoperabilidad. Al día siguiente, el 1 de noviembre de 2011, se anunció la formación de un Comité Técnico de OASIS [9] para avanzar en esta contribución AMQP versión 1.0 a través del proceso de estándares abiertos internacionales. El primer borrador de OASIS se publicó en febrero de 2012, [10] los cambios en comparación con el publicado por el Grupo de Trabajo se limitan a ediciones para una mayor claridad (sin cambios funcionales). El segundo borrador fue publicado para revisión pública el 20 de junio (nuevamente sin cambios funcionales), [11] y AMQP fue aprobado como estándar OASIS el 31 de octubre de 2012. [12]
OASIS AMQP fue aprobado para su lanzamiento como una norma internacional ISO e IEC en abril de 2014. [13] AMQP 1.0 fue votado a través del Comité Técnico Conjunto sobre Tecnología de la Información (JTC1) de la Organización Internacional de Normalización (ISO) y la Comisión Electrotécnica Internacional (IEC ). La presentación aprobada de OASIS AMQP ha recibido la designación ISO / IEC 19464.
Las versiones anteriores de AMQP fueron 0-8, publicadas en junio de 2006, 0-9, publicadas en diciembre de 2006, 0-10 publicadas en febrero de 2008 [14] y 0-9-1, publicadas en noviembre de 2008. Estas versiones anteriores son significativamente diferente de la especificación 1.0. [15] [16]
Si bien AMQP se originó en la industria de servicios financieros, tiene aplicabilidad general a una amplia gama de problemas de middleware .
Descripción de AMQP 1.0
Tipo de sistema
AMQP define un esquema de codificación autodescriptivo que permite la representación interoperable de una amplia gama de tipos de uso común. También permite que los datos mecanografiados se anoten con un significado adicional, [17] por ejemplo, se puede anotar un valor de cadena en particular para que pueda entenderse como una URL . Del mismo modo, un valor de mapa que contenga pares clave-valor para 'nombre', 'dirección', etc., podría anotarse como una representación de un tipo de 'cliente'.
El sistema de tipos se utiliza para definir un formato de mensaje que permite que las entidades de procesamiento expresen y comprendan metadatos estándar y extendidos. También se utiliza para definir las primitivas de comunicación a través de las cuales se intercambian mensajes entre dichas entidades, es decir, los cuerpos de trama AMQP .
Performativos y el protocolo de enlace
La unidad básica de datos en AMQP es un marco . Hay nueve cuerpos de tramas AMQP definidos que se utilizan para iniciar, controlar y eliminar la transferencia de mensajes entre dos pares. Estos son:
- abierto (la conexión )
- begin (la sesión )
- adjuntar (el enlace )
- transferir
- flujo
- disposición
- separar (el enlace )
- end (la sesión )
- cerrar (la conexión )
El protocolo de enlace está en el corazón de AMQP.
Se envía un cuerpo de marco adjunto para iniciar un nuevo enlace; un desprendimiento para derribar un enlace. Se pueden establecer enlaces para recibir o enviar mensajes.
Los mensajes se envían a través de un enlace establecido utilizando la trama de transferencia . Los mensajes de un enlace fluyen en una sola dirección.
Las transferencias están sujetas a un esquema de control de flujo basado en créditos, gestionado mediante marcos de flujo . Esto permite que un proceso se proteja a sí mismo de ser abrumado por un volumen demasiado grande de mensajes o más simplemente para permitir que un enlace de suscripción extraiga mensajes como y cuando lo desee. [18]
Cada mensaje transferido debe finalmente resolverse . La liquidación asegura que el remitente y el receptor acuerden el estado de la transferencia, brindando garantías de confiabilidad. Los cambios en el estado y la liquidación de una transferencia (o conjunto de transferencias) se comunican entre los pares utilizando el marco de disposición . Se pueden aplicar varias garantías de confiabilidad de esta manera: como máximo una vez, al menos una vez y exactamente una vez. [19]
Se pueden agrupar varios enlaces, en ambas direcciones, en una sesión . Una sesión es una conversación bidireccional, secuencial entre dos compañeros que se inicia con un comienzan marco y termina con un extremo del marco. Una conexión entre dos pares puede tener múltiples sesiones multiplexadas, cada una de ellas lógicamente independiente. Las conexiones se inician con una trama abierta en la que se expresan las capacidades del par emisor y se terminan con una trama cerrada .
Formato de mensaje
AMQP define como mensaje simple , la parte del mensaje que crea la aplicación de envío. Esto se considera inmutable ya que el mensaje se transfiere entre uno o más procesos.
Asegurar que el mensaje enviado por la aplicación sea inmutable permite la firma y / o el cifrado de mensajes de un extremo a otro y asegura que cualquier verificación de integridad (por ejemplo, hash o resúmenes ) siga siendo válida. El mensaje puede ser anotado por intermediarios durante el tránsito, pero dichas anotaciones se mantienen distintas del mensaje desnudo inmutable . Se pueden agregar anotaciones antes o después del mensaje simple.
El encabezado es un conjunto estándar de anotaciones relacionadas con la entrega que se pueden solicitar o indicar para un mensaje e incluye tiempo de vida, durabilidad y prioridad. [20]
El mensaje desnudo en sí está estructurado como una lista opcional de propiedades estándar (ID de mensaje, ID de usuario, hora de creación, respuesta, asunto, ID de correlación, ID de grupo, etc.), una lista opcional de propiedades específicas de la aplicación (es decir, propiedades extendidas ) y un cuerpo, al que AMQP se refiere como datos de la aplicación. [21]
Las propiedades se especifican en el sistema de tipos AMQP, al igual que las anotaciones. Los datos de la aplicación pueden ser de cualquier forma y en cualquier codificación que elija la aplicación. Una opción es utilizar el sistema de tipo AMQP para enviar datos estructurados y autodescriptivos.
Capacidades de mensajería
El protocolo de enlace transfiere mensajes entre dos nodos, pero asume muy poco sobre qué son esos nodos o cómo se implementan.
Una categoría clave son los nodos que se utilizan como punto de encuentro entre remitentes y receptores de mensajes (por ejemplo, colas o temas ). La especificación AMQP llama a dichos nodos nodos de distribución y codifica algunos comportamientos comunes. [22]
Esto incluye:
- algunos resultados estándar para las transferencias, a través de los cuales los receptores de mensajes pueden, por ejemplo, aceptar o rechazar mensajes [23]
- un mecanismo para indicar o solicitar uno de los dos patrones básicos de distribución, consumidores competidores y no competidores, a través de los modos de distribución mover y copiar respectivamente [24]
- la capacidad de crear nodos bajo demanda, [25] [26] por ejemplo, para colas de respuesta temporales
- la capacidad de refinar el conjunto de mensajes de interés para un receptor a través de filtros [27]
Aunque AMQP se puede utilizar en sistemas simples de igual a igual, definir este marco para las capacidades de mensajería también permite la interoperabilidad con intermediarios de mensajería (corredores, puentes, etc.) en redes de mensajería más grandes y ricas. El marco especificado cubre los comportamientos básicos, pero permite que evolucionen las extensiones que pueden codificarse y estandarizarse aún más.
Implementaciones
Implementaciones de broker AMQP 1.0
- Apache Qpid , un proyecto de código abierto en la Fundación Apache
- Apache ActiveMQ , un proyecto de código abierto en la Fundación Apache
- Azure Event Hubs [28] [29]
- Bus de servicio de Azure [28] [30]
- Solace PubSub +, un corredor multiprotocolo en hardware, software y nube [31]
Implementaciones de broker AMQP anteriores a 1.0
- JORAM , una implementación de código abierto de Java del Consorcio OW2 .
- Apache Qpid mantiene la compatibilidad con varias versiones de AMQP [32]
- StormMQ , un servicio de cola de mensajes alojado que utiliza AMQP. Se ofrece como un servicio gestionado comercialmente .
- RabbitMQ , un proyecto de código abierto patrocinado por Pivotal , admite principalmente AMQP 0-9-1, con 1.0 a través de un complemento experimental
Especificación
La versión 1.0 del protocolo AMQP es la versión de especificación actual. Se centra en las funciones básicas que son necesarias para la interoperabilidad a escala de Internet. Contiene enrutamiento menos explícito que las versiones anteriores porque la funcionalidad principal es la primera en estar rigurosamente estandarizada. La interoperabilidad de AMQP 1.0 se ha probado más exhaustivamente con más implementadores que las versiones anteriores. [33]
El sitio web de AMQP contiene la especificación OASIS para la versión 1.0 .
Las versiones anteriores de AMQP, publicadas antes del lanzamiento de 1.0 (ver Historial arriba) y significativamente diferentes de él, incluyen:
- AMQP 0-9-1 , que tiene clientes disponibles "para muchas plataformas y lenguajes de programación populares" [34]
- AMQP 0-10
Especificaciones comparables
Estas son las especificaciones de protocolo abierto conocidas que cubren el mismo espacio o un espacio similar al de AMQP:
- Streaming Text Oriented Messaging Protocol (STOMP), un protocolo basado en texto desarrollado en Codehaus; utiliza la semántica de 'destino' similar a JMS.
- Protocolo extensible de mensajería y presencia (XMPP), el protocolo extensible de mensajería y presencia.
- MQTT , un protocolo ligero de publicación y suscripción.
- OpenWire como lo usa ActiveMQ .
Java Message Service (JMS), a menudo se compara con AMQP. Sin embargo, JMS es una especificación API (parte de la especificación Java EE ) que define cómo se implementan los productores y consumidores de mensajes. JMS no garantiza la interoperabilidad entre implementaciones, y es posible que el sistema de mensajería compatible con JMS en uso deba implementarse tanto en el cliente como en el servidor. Por otro lado, AMQP es una especificación de protocolo a nivel de cable. En teoría, AMQP proporciona interoperabilidad, ya que se pueden implementar diferentes software compatibles con AMQP en el lado del cliente y del servidor. Tenga en cuenta que, al igual que HTTP y XMPP , AMQP no tiene una API estándar.
Ver también
- De igual a igual
- Cola de mensajes
- Servicio de cola de mensajes
- Servicio de distribución de datos
Referencias
- ↑ a b O'Hara, J. (2007). "Hacia un middleware empresarial de productos básicos" (PDF) . Cola de ACM . 5 (4): 48–55. doi : 10.1145 / 1255421.1255424 .
- ^ Vinoski, S. (2006). "Protocolo avanzado de Message Queue Server" (PDF) . Computación por Internet IEEE . 10 (6): 87–89. doi : 10.1109 / MIC.2006.116 .
- ^ "OASIS AMQP versión 1.0, secciones 2.6.7-2.6.8" . Comité Técnico OASIS AMQP . Consultado el 18 de junio de 2012 .
- ^ "OASIS AMQP versión 1.0, secciones 2.6.12-2.6.13" . Comité Técnico OASIS AMQP . Consultado el 18 de junio de 2012 .
- ^ "OASIS AMQP versión 1.0, sección 5.1" . Comité Técnico OASIS AMQP . Consultado el 18 de junio de 2012 .
- ^ "OASIS AMQP versión 1.0, sección 2.1" . Comité Técnico OASIS AMQP . Consultado el 18 de junio de 2012 .
- ^ Hintjens, Pieter (7 de febrero de 2006). "Antecedentes del Proyecto AMQ, Autores" . iMatix Corporation . Consultado el 18 de febrero de 2018 .
- ^ "Transiciones del Grupo de Trabajo AMQP a la Sección de Miembros de OASIS" . Archivado desde el original el 16 de abril de 2012 . Consultado el 28 de enero de 2012 .
- ^ OASIS forma un comité técnico de AMQP para promover la interoperabilidad de la mensajería empresarial en entornos de middleware, móvil y nube
- ^ "Revisión pública de 30 días para OASIS AMQP versión 1.0" . 21 de febrero de 2012 . Consultado el 18 de junio de 2012 .
- ^ "Revisión pública de 15 días para OASIS AMQP Versión 1.0" . 20 de junio de 2012 . Consultado el 20 de junio de 2012 .
- ^ "AMQP 1.0 se convierte en estándar OASIS" . 31 de octubre de 2012 . Consultado el 1 de noviembre de 2012 .
- ^ "Tecnología de la información - Especificación avanzada de Message Queue Server (AMQP) v1.0" . ISO / IEC 19464 . ISO . Consultado el 1 de mayo de 2014 .
- ^ "Acta de la reunión AMQP PMC 13 de febrero de 2008" . Minutos AMQP PMC . Grupo de trabajo AMQP. Archivado desde el original el 30 de noviembre de 2012 . Consultado el 15 de junio de 2012 .
- ^ "RabbitMQ - AMQP 0-8 a 0-9-1" . www.rabbitmq.com . Consultado el 12 de enero de 2018 .
- ^ rabbitmq-amqp1.0: compatibilidad con AMQP 1.0 para RabbitMQ , RabbitMQ, 17 de diciembre de 2017 , consultado el 12 de enero de 2018
- ^ "OASIS AMQP versión 1.0, sección 1.1" . Comité Técnico OASIS AMQP . Consultado el 18 de junio de 2012 .
- ^ "OASIS AMQP versión 1.0, sección 2.6.7-2.6.9" . Comité Técnico OASIS AMQP . Consultado el 18 de junio de 2012 .
- ^ "OASIS AMQP versión 1.0, sección 2.6.12-2.6.14" . Grupo de trabajo AMQP . Consultado el 18 de junio de 2012 .
- ^ "OASIS AMQP versión 1.0, sección 3.2.1" . Comité Técnico OASIS AMQP . Consultado el 18 de junio de 2012 .
- ^ "OASIS AMQP versión 1.0, sección 3.2" . Comité Técnico OASIS AMQP . Consultado el 18 de junio de 2012 .
- ^ "OASIS AMQP versión 1.0, sección 3.3" . Comité Técnico OASIS AMQP . Consultado el 15 de junio de 2012 .
- ^ "OASIS AMQP versión 1.0, sección 3.4" . Comité Técnico OASIS AMQP . Consultado el 18 de junio de 2012 .
- ^ "OASIS AMQP versión 1.0, sección 3.5.2" . Comité Técnico OASIS AMQP . Consultado el 18 de junio de 2012 .
- ^ "OASIS AMQP versión 1.0, sección 3.5.3" . Comité Técnico OASIS AMQP . Consultado el 18 de junio de 2012 .
- ^ "OASIS AMQP versión 1.0, sección 3.5.4" . Comité Técnico OASIS AMQP . Consultado el 18 de junio de 2012 .
- ^ "OASIS AMQP versión 1.0, sección 3.5.1" . Comité Técnico OASIS AMQP . Consultado el 18 de junio de 2012 .
- ^ a b eje c. "AMQP 1.0 en la guía de protocolo de Azure Service Bus y Event Hubs" . docs.microsoft.com . Consultado el 21 de mayo de 2019 .
- ^ ShubhaVijayasarathy. "¿Qué es Azure Event Hubs? - un servicio de ingestión de Big Data" . docs.microsoft.com . Consultado el 21 de mayo de 2019 .
- ^ eje c. "Descripción general de AMQP 1.0 en Azure Service Bus" . docs.microsoft.com . Consultado el 21 de mayo de 2019 .
- ^ "Consuelo PubSub +" . solace.com .
- ^ https://web.archive.org/web/20130914045254/http://qpid.apache.org/releases/qpid-0.22/index.html
- ^ "Estado de las versiones anteriores a 1.0 de AMQP" . Sitio AMQP . Consultado el 28 de mayo de 2014 .
- ^ "Explicación del modelo AMQP 0-9-1" . VMware, Inc . Consultado el 1 de noviembre de 2012 .
enlaces externos
- Sitio web de AMQP
- Comité técnico OASIS AMQP
- Descripción general de alto nivel de AMQP y el modelo AMQP (versión 0-9-1)
- Análisis OMG de AMQP y comparación con DDS-RTPS
- Google Tech Talk, con video y diapositivas, sobre RabbitMQ
- Presentación de mensajería AMQP y RestMS en FOSDEM 2009
- Lista de clientes AMQP