Abrir o menú principal

MQTT[1] (Message Queuing Telemetry Transport) é un protocolo de menxasería baseado en publicación-subscrición recollido na norma ISO (ISO/IEC PRF 20922) [2] . Funciona sobre o protocolo TCP/IP. Está deseñado para conexións con localizacións remotas onde se require unha "pegada de código pequeno" ou o ancho de banda da rede é limitado. O patrón de mensaxería publicación-subscrición require un intermediario de mensaxes.

Andy Stanford-Clark de IBM e Arlen Nipper de Cirrus Link crearon a primeira versión do protocolo en 1999.[3]

En 2013, IBM presentou MQTT v3.1 ao corpo de especificación de OASIS cunha carta que aseguraba que só se poderían aceptar cambios menores na especificación.[4] MQTT-SN [5] é unha variación do protocolo principal dirixido a dispositivos integrados en redes que non son TCP/IP, como Zigbee.

Historicamente, o "MQ" en "MQTT" proveu da liña de produtos IBM MQ (entón ' MQSeries') de cola de mensaxes.[6] Con todo, non se require que a cola en si sexa compatible como unha característica estándar en todas as situacións.[7]

Os protocolos alternativos inclúen o Protocolo avanzado de Message Queue Server ( AMQP), Streaming Text Oriented Messaging Protocol (STOMP), IETF Constrained Application Protocol,[8] XMPP,[9][10] DDS,[11] OPC UA,[12] e Web Application Messaging Protocol (WAMP).

Descrición xeralEditar

Un sistema MQTT consiste en clientes que se comunican cun servidor, a miúdo chamado "broker". Un cliente pode ser un publicador de información ou un subscritor. Cada cliente pode conectarse ao broker.

A información organízase nunha xerarquía de temas. Cando un editor ten un novo elemento de datos para distribuír, envía unha mensaxe de control cos datos ao intermediario conectado. O axente logo distribúe a información a calquera cliente que se subscribiu a ese tema. O editor non necesita ter ningún dato sobre o número ou as localizacións dos subscritores, e os subscritores á súa vez non teñen que estar configurados con ningún dato sobre os editores.

Se un broker recibe un tema para o cal non hai subscritores actuais, descartará o tema a menos que o editor indique que o tema se reterá. Isto permite que os novos subscritores dun tema reciban o valor máis actual en lugar de esperar a próxima actualización dun editor.

Cando un cliente de publicación conéctase por primeira vez ao broker, pode configurar unha mensaxe predeterminado para que se envíe aos subscritores se o broker detecta que o cliente de publicación desconectouse inesperadamente do broker.

Os clientes só interactúan cun broker, pero un sistema pode conter varios servidores intermediarios que intercambian datos segundo os temas dos seus subscritores actuais.

Unha mensaxe de control MQTT mínimo pode ser tan pouco como dous bytes de datos. Unha mensaxe de control pode transportar case 256 megabytes de datos se é necesario. Existen catorce tipos de mensaxes definidas que se utilizan para conectar e desconectar a un cliente dun broker, para publicar datos, para acusar recibo dos datos e para supervisar a conexión entre o cliente e o servidor.

MQTT baséase no protocolo TCP para a transmisión de datos. Unha variante, MQTT- SN, úsase sobre outros transportes como UDP ou Bluetooth.

MQTT envía as credenciais de conexión en formato de texto plano e non inclúe ningunha medida de seguridade ou autenticación. Isto pode ser proporcionado polo transporte TCP subxacente usando medidas para protexer a integridade da información transferida da interceptación ou duplicación.

Tipos de mensaxesEditar

ConectarEditar

 
Exemplo dunha conexión MQTT (QoS 0) con conexión, publicación/subscrición e desconexión. A primeira mensaxe do cliente B almacénase debido ao flag de retención.

Espera a que se estableza unha conexión co servidor e crea unha ligazón entre os nodos.

DesconectarEditar

Espera a que o cliente MQTT termine calquera traballo que deba facer e que a sesión TCP/IP desconéctese.

PublicarEditar

Regresa inmediatamente ao subproceso da aplicación despois de pasar a solicitude ao cliente MQTT.

Calidade de servizo (QoS)Editar

Artigo principal: Calidade de servizo.

Cada conexión ao axente pode especificar unha medida de "calidade de servizo". Estes clasifícanse en orde crecente de gastos xerais:

  • Como máximo unha vez: a mensaxe envíase só unha vez e o cliente e o axente non toman medidas adicionais para confirmar a entrega (activar e esquecer).
  • Polo menos unha vez: a mensaxe é reintentado polo remitente varias veces ata que se recibe o acuse de recibo (entrega confirmada).
  • Exactamente unha vez: o remitente e o receptor involúcranse nun protocolo de dous niveis para garantir que só se reciba unha copia da mensaxe (entrega asegurada).

[13] Este campo non afecta o manexo das transmisións de datos TCP subxacentes; só úsase entre remitentes e receptores MQTT.

Aplicacións do mundo realEditar

Hai varios proxectos que implementan MQTT. Algúns exemplos son:

  • Facebook Messenger. Facebook usou aspectos de MQTT en Facebook Messenger para chat en liña.[14] Con todo, non está claro a cantidade de MQTT que se utiliza ou para que.
  • IECC Escalable , a última versión de DeltaRail do seu Sistema de Control de Sinalización IECC utiliza MQTT para as comunicacións dentro das diversas partes do sistema e outros compoñentes do sistema de sinalización . Proporciona o marco de comunicacións subxacente para un sistema que cumpre coas normas CENELEC para as comunicacións de seguridade críticas.[15]
  • A plataforma EVRYTHNG IoT utiliza MQTT como protocolo M2 M para millóns de produtos conectados.
  • Amazon Web Services anunciou Amazon IoT baseado en MQTT en 2015.[16][17]
  • A especificación estándar Open Geospatial Consortium SensorThings API ten unha extensión MQTT na norma como ligazón de protocolo de mensaxe adicional. Demostrouse nun piloto de IoT do Departamento de Seguridade Nacional de EE. UU.[18]
  • Os servizos de OpenStack Upstream Infrastructure están conectados por un bus de mensaxes unificadas MQTT con Mosquitto como axente de MQTT.[19]
  • Adafruit lanzou un MQTT servizo na nube gratuíto para experimentadores e aprendices de IoT chamado "Adafruit IO" en 2015.[20][21]
  • Microsoft Azure IoT Hub utiliza MQTT como o seu protocolo principal para as mensaxes de telemetría.[22]
  • XIM, Inc. lanzou un cliente MQTT chamado MQTT Buddy en 2017.[23][24] É unha aplicación MQTT para Android e iOS, pero non F- Droid, usuarios dispoñibles en inglés, ruso e chinés.
  • Node-REDE admite nodos MQTT a partir da versión 0.14, para configurar correctamente as conexións TLS.[25]
  • O software de código aberto domótico da plataforma Home Assistant está habilitado para MQTT e ofrece catro opcións para os corredores de MQTT.[26][27]
  • O marco de automatización do fogar ' Pimatic' 'para Raspberry Pi e baseado en Node.js ofrece o complemento MQTT que brinda soporte completo para o protocolo MQTT.[28]
  • McAfee OpenDXL baséase en MQTT con melloras nos propios intermediarios de mensaxería para que poidan comprender intrinsecamente o formato da mensaxe DXL para admitir funcións avanzadas como servizos, mensaxes de solicitude/resposta (punto a punto), conmutación por erro do servizo e zonas de servizo.[29][30]
  • [1][Ligazón morta] é unha ferramenta gratuíta de integración e descubrimento de MQTT para Windows, Linux e Mac. Visualiza temas baseados ​​en xerarquía de temas.

NotasEditar

  1. "MQTT 3.1.1 especificación". OASIS. 10/12/2015. Consultado o 25/4/2017. 
  2. "ISO/IEC 20922: 2016 Tecnoloxía da información - Transporte de telemetría de Message Queue Server (MQTT) v3.1.1". iso.org. Organización Internacional para a Estandarización. June 15, 2016. 
  3. "10 th birthday party". MQTT. org. July 2009. Consultado o 25/4/2015. 
  4. "OASIS Message Comité Técnico de Queue Server Telemetry Transport ( MQTT)". OASIS. Consultado o 9/5/2014. 
  5. Stanford-Clark, Andy; Hong Linh Truong (14/11/2013). "MQTT para redes de sensores ( MQTT- SN) Especificación do protocolo Versión 1.2" (PDF). mqtt.org. MQTT. p. 27. Consultado o 9/5/2014. 
  6. "IBM MQ". IBM. Consultado o 18 de novembro de 2013. 
  7. Piper, Andy (19/2/2013). "Elección do protocolo de mensaxería: AMQP, MQTT ou STOMP". blogues. vmware.com. VMware Blogues. p. 1. Consultado o 23/10/2013. [Ligazón morta]
  8. Shelby, Zach; Hartke, Klaus; Bormann, Carsten (June 26, 2014). "Protocolo de aplicación restrinxida ( CoAP) RFC 7252". tools. ietf. org. IETF. p. 1. Consultado o 15/11/2015. 
  9. XMPP community (Novembro 1, 2013). "InternetOfThings". wiki.xmpp.org. XMPP wiki. p. 1. Consultado o 9 de maio de 2014. 
  10. Baker, Fred; Meyer, David (June 21, 2011). "Protocolos da internet para Smart Grid RFC 6272". datatracker. ietf. org. IETF. p. 1. Consultado o 9 de maio de 2014. 
  11. "DDS Portal-Data Distribution Services". portals.omg.org (en inglés). Consultado o 14/1/2018. 
  12. "Microsoft introduce novo OPC UA multiplataforma de soporte aberto para a Internet industrial de cósalas Internet das cousas" (en inglés). 23/6/2016. Consultado o 13/10/2017. 
  13. "IBM Knowledge Center". www.ibm.com (en inglés). Consultado o 2018-01-30. 
  14. Zhang, Lucy (12/8/2011). "Construíndo Facebook Messenger". facebook.com/Engineering. Facebook. p. 1. Consultado o 15/10/2015. Ao manter unha conexión MQTT e enrutar mensaxes a través da nosa canle de chat, a miúdo puidemos lograr a entrega de teléfono a teléfono en centos de milisegundos, en lugar de varios segundos. 
  15. Wood, Daren; Robson, Dave (13/8/2012). "Tecnoloxía de intermediario de mensaxes para un control de sinalización flexible" (PDF). irse.org. IRSE. p. 7. Arquivado dende o orixinal (PDF) o 31/03/2014. Consultado o 31/3/2014. 
  16. Barr, Jeff (8/10/2015). "AWS IoT - Cloud Services for Connected Devices". aws.amazon.com. Amazon Web Services. p. 1. Consultado o October 21, 2015. 
  17. "AWS IoT". aws.amazon.com/iot. Amazon Web Services. p. 1. Consultado o July 1, 2017. 
  18. Brothers, Reginald (January 25, 2016). "S&T’s Internet of Things Pilot Demonstrates 'State of the Practical'". dhs.gov. p. 1. Consultado o March 31, 2016. 
  19. "OpenStack Firehose - The unified message bus for Infra services". docs.openstack.org. OpenStack Infrastructure Team. p. 1. Consultado o August 30, 2016. 
  20. "Coming Soon: Adafruit IO". blog.adafruit.com. Adafruit Industries. September 16, 2014. p. 1. Consultado o March 29, 2017. 
  21. "The Internet of Things for Everyone". io.adafruit.com. Adafruit. p. 1. Consultado o July 1, 2017. 
  22. Dotchkoff, Konstantin; Betts, Dominic; Kshirsagar, Dhanashri; mastermanu; Damaggio, Elio (1/3/2017). "Understanding Microsoft Azure MQTT Support". docs.microsoft.com. Microsoft. p. 1. Consultado o 29/3/2017. 
  23. "The story of MQTT Buddy begins!". mqtt.ximxim.com. XIM, Inc. February 24, 2017. p. 1. Arquivado dende o orixinal o 23 de xullo de 2017. Consultado o July 1, 2017. 
  24. "MQTT Buddy". mqtt.ximxim.com. XIM, Inc. Arquivado dende o orixinal o 21/03/2018. Consultado o 1/7/2017. 
  25. Community staff writer (June 14, 2016). "Version 0.14 released". nodered.org/blog. Node-RED. Consultado o 6/7/2016. MQTT with TLS support 
  26. Home Assistant Community (August 7, 2015). "MQTT". home-assistant.io. Home Assistant Community. Consultado o August 4, 2017. 
  27. Home Assistant Community (August 7, 2015). "MQTT Brokers". home-assistant.io. Home Assistant Community. Consultado o 4/8/2017. The MQTT component needs you to run an MQTT broker for Home Assistant to connect to. There are four options, each with various degrees of ease of setup and privacy. 
  28. Kail, Marek (October 16, 2016). "pimatic-mqtt". pimatic.org. Oliver Schneider. Consultado o 11/8/2017. 
  29. "What protocol does OpenDXL use? - OpenDXL". OpenDXL (en inglés). Consultado o 13/10/2017. 
  30. McDonald, Ted. "Architecture Guide McAfee Data Exchange Layer (DXL)" (PDF).