`
rensanning
  • 浏览: 3548600 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:38145
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:607306
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:682329
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:89350
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:401851
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69693
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:91716
社区版块
存档分类
最新评论

MQTT入门(1)- 简要介绍

 
阅读更多
MQTT(MQ Telemetry Transport)消息队列遥测传输协议

是TCP / IP协议之上,基于发布Publish/订阅Subscribe模式,机器到机器(M2M)通信,二进制传输的轻量级消息协议。1999年IBM开发,2010年对外免费开放,2014年正式成为OASIS的官方标准。

虽然名称里有MQ,但它不是Message Queue,它并不会保证消息的顺序。

和 RabbitMQ 相比:考虑在低带宽、不可靠的4G/LTE网络上运行(可靠性),多用于IoT、M2M、IM。
和 HTTP 相比:通信量减少(低带宽)、设备耗电量减少(低功耗)、支持消息推送、Pub/Sub模型,双向1对多/多对多通信等。

MQTT最小的packet大小是只有2个字节的header。



目前百度、阿里、腾讯、京东、移动等都有物联网平台,而MQTT是物联网中相当重要的角色。

物联网环境下,大量的device或sensor需要将很小的数据定期发送出去,并接受外部传回来的数据。这样的数据交换是大量存在的。



MQTT通过Broker转发消息,所以可以穿透NAT,类似的协议还有AMQP、XMPP等。

MQTT协议里面是按照设备一直在线设计的,数据都是保存在内存里的,所以MQTT是比较吃内存的。

官方网站:http://mqtt.org/
默认端口:1883/8883(TLS)
最新标准:MQTT v3.1.1(OASIS)
  英文版:http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.html
  中文版:https://github.com/mcxiaoke/mqtt

下一个版本MQTT v5.0也即将很快发布。(没有 MQTT v4.0,因为 protocol level v3.1是3,而v3.1.1是4)
https://blog.codecentric.de/en/2017/11/hello-mqtt-version-5-0/

(1)基本概念
Publish/Subscribe
替代传统的客户端/服务器模型
多维度解耦
   空间解耦:发布者和订阅者不需要知道对方
   时间解耦:发布者和订阅者不需要同时运行(离线消息)
   同步解耦:发布和接受都是异步通信,无需停止任何处理
订阅者可以取消订阅
Messages
Topics
树状结构命名用“/”区分,类似于REST,比如:home/light/brightness
通配符:
   + 单层通配符 如,a/b/+” 匹配 “a/b/c1” 和 “a/b/c2”,但是不匹配 “a/b/c/d”
   # 多层通配符 如 “a/b/c/#" 可以匹配 “a/b/c”、“a/b/c/d” 和  “a/b/c/d/e”
命名规范:http://tinkerman.cat/mqtt-topic-naming-convention/
Server/Broker
负责接收消息,过滤消息并转发给消息订阅者
Client
Broker之外的都是客户端,可以发布或订阅消息

*** pub/sub模型是基于topic的消息转发系统,每个消息都会被贴上一个特定的topic,
消息并不会直接发送给订阅者,而是发布者首先将带有topic的消息发送broker。
订阅者可以从broker订阅自己相关的topic,当broker接收到发布过来的消息后,
broker开始执行基于topic的过滤,将特定的消息转发给特定的订阅者。

(2)三种角色
发布者Publisher -> 代理Broker -> 订阅者Subscriber

(3)14种消息类型


(4)功能
连接Connect / disconnect
发布Publish
订阅Subscribe / unsubscribe

(5)特性
服务质量QoS(Quality of Service)
  最多一次:发送一次,无需回复,消息有可能丢失。(传感器数据)
  至少一次:发送者没有收到接收者的PUBACK,过一段时间会重新发送,消息可能重复。
  只有一次:发送过程经过 PUBREC、PUBREL、PUBCOMP,保证一个包只收到一次
保留消息Retained Messages
持续会话Persistent Session
最后遗嘱Last will & Testament
SYS主题
  订阅位于$SYS层次下的主题来查看服务器的状态信息

(6)消息过滤
基于主题:订阅感兴趣的主题Topic
基于内容:订阅感兴趣的消息的过滤查询
基于类型:基于消息的类型进行过滤

(7)相关软件
MQTT只是个协议标准,实际的运用还需要各种软件来实现。

a - Servers/Brokers
VerneMQ https://vernemq.com/
EMQTT http://emqtt.io/
Mosquitto https://mosquitto.org/
其他:https://github.com/mqtt/mqtt.github.io/wiki/servers

b - Client Library
Eclipse Paho https://www.eclipse.org/paho/
MQTT.js https://github.com/mqttjs/MQTT.js

更多的可以参考:http://mqtt.org/software

(8)MQTT与消息队列的区别
  MQTT来自名为MQSeries的IBM产品,与MQ无关。
  消息队列存储消息,直到它们被消耗
  消息队列中只有一个消费者处理消息,MQTT中订阅主题的每个订阅者都会收到消息
  消息队列要提前并明确创建,MQTT中可以随时实时创建

(9)MQTT与HTTP的区别

http://www.rfwireless-world.com/Terminology/MQTT-vs-HTTP.html

(10)开发模块IoT boards
ESP8266(Wifi芯片)、Arduino、Raspberry Pi(树莓派)、LattePanda(拿铁熊猫)

推荐阅读HiveMQ Blog里的两个关于MQTT的系列文章:
MQTT Essentials :https://www.hivemq.com/blog/mqtt-essentials/

MQTT Security Fundamentals :https://www.hivemq.com/blog/mqtt-security-fundamentals/


参考:
https://www.hivemq.com/blog/how-to-get-started-with-mqtt
https://dzone.com/refcardz/getting-started-with-mqtt
http://geek.csdn.net/news/detail/228329
http://geek.csdn.net/news/detail/229509
http://dataguild.org/?tag=mqtt
http://www.blogjava.net/yongboy/category/54835.html
https://codezine.jp/article/corner/508
https://www.programmableweb.com/api-university/how-and-why-to-provide-event-driven-streaming-apis
https://www.survivingwithandroid.com/2016/10/mqtt-protocol-tutorial.html
  • 大小: 101.4 KB
  • 大小: 45.9 KB
  • 大小: 2.7 KB
  • 大小: 9.3 KB
  • 大小: 46.9 KB
  • 大小: 58.3 KB
1
0
分享到:
评论

相关推荐

    Getting-Started-With-MQTT-My-Electronics-Lab

    本文档的目标是为读者提供一个全面的MQTT入门教程,不仅包含理论知识,还通过实用的示例和项目帮助读者掌握实际应用。通过阅读本文档,即使是没有任何MQTT经验的初学者,也能够快速上手并投入实践,这使得它成为...

    mqtt-http-bridge:MQTT到HTTP桥

    入门安装捆绑器: sudo gem install bundler安装其他gem依赖项: bundle install运行本地Web服务器: bundle exec rackup -p 1234然后,您可以在浏览器中打开网桥: http://localhost:1234/要连接到您自己的MQTT...

    nodejs-mqtt-client-demo

    我们提供了一个简单的示例来帮助您入门。 在“终端”窗口中,运行以下命令以将示例存储库克隆到本地计算机: git clone https://github.com/wiihey/nodejs-mqtt-client-demo.git 步骤3:建立并执行 转到保存示例的...

    MQTT入门(10)- MQTT与WebSocket

    **MQTT入门(10)- MQTT与WebSocket** 在物联网(IoT)领域,消息传输协议(MQTT)和WebSocket是两种广泛使用的通信协议。它们各自具有独特的优势,适用于不同的应用场景。本文将深入探讨这两者的基本概念、工作原理...

    MQTT 入门介绍.docx

    ### MQTT入门介绍知识点详解 #### 一、MQTT概述 **MQTT**(Message Queuing Telemetry Transport)是一种轻量级的、基于客户端-服务器的消息发布/订阅传输协议,由IBM在1999年首次发布。它专为远程设备提供实时可靠...

    我的博文 ESP32-C3入门教程 应用 篇(一、 实例 一 通过MQTT协议连接ONENET上报传感器数据)的源码

    MQTT协议基于TCP/IP,具有简单、可靠和高效的特点,使得它成为物联网设备通信的理想选择。 ESP32-C3作为MQTT客户端,需要与ONENET云平台建立TCP连接。TCP(Transmission Control Protocol)是一种面向连接的、可靠...

    MQTT入门资料(用于了解什么是MQTT)

    ### MQTT入门资料(用于了解什么是MQTT) #### MQTT协议简介 MQTT(Message Queuing Telemetry Transport)是一种轻量级的、基于发布/订阅模式的消息传输协议,它为低带宽和不可靠网络连接下的设备提供了高效的...

    MQTT入门教材

    ### MQTT入门教材知识点详解 #### 一、MQTT协议简介 **MQTT**,全称为**Message Queuing Telemetry Transport**(消息队列遥测传输协议),是一种基于**发布/订阅**模型的轻量级消息协议,适用于资源受限的环境。...

    C#使用 MQTTnet 快速实现 MQTT 通信 Demo

    在本文中,我们将深入探讨如何使用C#编程语言和MQTTnet库快速实现MQTT通信。MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布...通过以上步骤,开发者可以快速入门MQTT通信,为物联网应用开发打下基础。

    基于python的EC800物联网mqtt协议开发指南:从入门到实战

    Paho-MQTT Python库提供了一个简单易用的API,允许开发者轻松地实现MQTT协议的连接、发布、订阅和断开等功能。 **二、EC800物联网模块** EC800是专为物联网设计的模块,支持GSM/GPRS/EDGE和3G网络,具备强大的数据...

    PackML-MQTT-Simulator:在MQTT上使用PackML进行接口的生产线模拟器

    一旦可用,最简单的方法是使用docker使用环境变量来运行模拟,以控制MQTT连接,站点,区域和线路。 一旦启动并运行,请使用MQTT客户端发布到... / Command / Reset和... / Command / Start,以使模拟计算机进入执行...

    bt-mqtt-gateway:一个简单的Python脚本,提供了到MQTT网关的蓝牙功能,可通过自定义工作程序轻松扩展。 见https

    一个简单的Python脚本,提供了到MQTT网关的蓝牙功能,可通过自定义工作程序轻松扩展。 有关更多信息,请参见 。 特征 通过定制工作人员高度可扩展 通过MQTT发布数据 可配置的主题和有效负载 MQTT身份验证支持 系统...

    mqtt_test.zip

    这个封装库可能包含了一些抽象和辅助函数,使得调用MQTT功能变得更直观、更简单。它可能会隐藏一些底层细节,比如错误处理和连接管理,让开发者能更专注于应用逻辑,而不是底层通信机制。 此外,"mqtt_test"可能是...

    PLC,IOT>ESP32 项目实践-MODBUS转MQTT网关

    在后续的内容中,还会详细介绍如何利用OpenPLC Editor编写代码、配置MODBUS和MQTT通信参数、进行程序调试等高级操作。 综上所述,IOT-PLC-5672RE不仅是一款高性能的MODBUS转MQTT网关设备,还配备了一整套完善的开发...

    ESP8266 MQTT透传固件+配置上位机

    1. **固件文件**:这是预编译的ESP8266固件,包含MQTT客户端库和串口透传逻辑,可能需要通过如Arduino IDE或ESP8266 Flash Download Tool等工具烧录到ESP8266模块。 2. **配置工具**:一个桌面应用程序,允许用户...

    MQTT、XMPP、GCM、Mosquitto资料合集

    Android推送方案分析(MQTT、XMPP、GCM).doc Android推送服务(GCM) .doc GCM:入门.doc Mosquitto简要教程(安装&使用).doc 开源broker软件mosquitto(mqtt v3.1支持协议).doc 采用MQTT协议实现Android消息推送.doc

    qtmqtt Qt6.2.4+VS2019 x64编译动态库及简单示例(附带Qt在线安装包+perl安装包)

    这样一来,很多之前习惯用Qt5的童鞋就有点摸不着头脑了,特别是一些刚入门的新手,看到Qt工程,习惯性的一上来就去找pro工程文件,但是Qt6的cmake工程是没有pro文件的,所以更是二脸懵逼。 资源包含了qt在线安装包...

    基于STM32通过MQTT协议将温湿度数据上传至阿里云

    总结来说,通过STM32与MQTT协议结合,我们可以构建一个简单的物联网设备,实现温湿度数据的实时监测和远程传输。这不仅展示了STM32在嵌入式系统中的强大能力,也突显了MQTT在物联网通信中的灵活性和效率。对于开发者...

    Spring boot整合MQTT最简单的案例(供初学者参考)

    在本文中,我们将深入探讨如何将Spring Boot与MQTT(Message Queuing Telemetry Transport)集成,为初学者提供一个简单的入门案例。MQTT是一种轻量级的发布/订阅消息协议,广泛应用于物联网(IoT)场景,而Spring ...

Global site tag (gtag.js) - Google Analytics