资讯详情

MQTT协议与EMQ

MQTT协议与EMQ

MQTT协议简介

简介

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布订阅(publish/subscribe)构建和构建模式的轻量级通信协议TCP/IP协议上,由IBM在1999年发布。MQTT最大的优点是可以为连接远程设备提供实时可靠的信息服务,代码少,带宽有限。它作为一种低成本、低带宽的即时通信协议,广泛应用于物联网、小型设备、移动应用等领域。 MQTT基于客户端-服务器的消息发布/订阅传输协议。MQTT协议重量轻、简单、开放、易于实现。这些特点使他得到了广泛的应用。在许多情况下,包括第一个环境,如机器和机器(M2M)通信和物联网(IoT)。其他,广泛应用于卫星链路通信传感器、偶尔拨号的医疗设备、智能家居和一些小型设备。

请添加图片描述

MQTT协议设计规范

因为物联网的环境很特殊,所以MQTT遵循以下设计原则:

  1. 简化,不添加可有可无的功能
  2. 发布/订阅模式,方便传感器之间传输新闻,解耦Client/Server模型的好处是没有必要提前知道对方的存在(IP/Port),不必同时运行
  3. 允许用户动态创建主题(不需要提前创建主题),零运维成本
  4. 最大限度地降低传输量,提高传输效率
  5. 考虑低带宽、高延迟、网络不稳定等因素
  6. 保持和控制连续会话(心跳)
  7. 理解客户端计算能力可能很低
  8. 提供服务质量(Quality of service :Qos)管理
  9. 不强制传输数据的类型和格式,保持灵活性(仅应用业务数据)

MQTT协议的主要特点

MQTT协议设计为低带宽、不可靠的网络远程传感器和控制设备通信,具有一定的主要特点:

  1. 开放新闻协议,简单实现
  2. 使用发布/订阅模式,提供一对多的新闻发布,解除应用程序耦合
  3. 屏蔽负载(协议携带的应用数据)内容的消息传输
  4. 基于TCP/IP网络连接,提供有序、无损的双向连接 主流的MQTT是基于TCP数据推送连接,但也是基于UDP版本叫MQTT—SN。由于连接方式不同,这两个版本的优缺点自然也不同
  5. 新闻服务质量(Qos)支持、可靠传输保证:发布服务质量有三种
  1. 1字节固定报头,2字节心跳报文,最小传输费用和协议交换,有效减少网络流量 这就是为什么在介绍里说他非常适合“在物联网领域,传感器与服务器的通信,信息的收集,要知道嵌入式设备的运算能力和带宽都相对薄弱”,使用这种协议来传递消息在适合不过了
  2. 在线状态感知:使用Last Will和Testament特点及通知各方客户端异常终端的机制 Last Will:用于通知同一主题下的其他设备的遗言机制已被切断 Testament: 遗嘱机制与功能相似Last Will

应用

MQTT该协议广泛应用于物联网、移动物联网、智能硬件、车联网、电力能源等领域

  • 物联网M2M通信、物联网大数据采集
  • Android消息的推送,Web消息推送
  • 例如,移动即时消息Facebook Messager
  • 智能硬件、智能家居、智能电器
  • 车联网通信,电动车站桩采集
  • 智慧城市、远程医疗、远程教育
  • 石油和能源市场

MQTT协议原理

MQTT实现协议的方式

实现MQTT在许可过程中,客户端和服务器需要完成协议,MQTT协议有三种身份:出版商:(Publish)、代理(Broker)、订阅着(Subsscribe),其中,新闻发布者和订阅是客户端,新闻代理是服务器,新闻发布者可以同时是订阅者 MQTT 传输的信息分为 主题(Topic)和负载(payload)两部分:

  • Topic,可以理解为新闻类型,订阅者订阅(Subscribe)之后,您将收到主题的消息内容(payload)
  • payload,可以理解为新闻内容,是指订阅者要使用的具体内容

网络传输和应用信息

MQTT底层网络传输将建立:他将建立客户端到服务器的连接,并在字节流的基础上提供有序、无损的双向传输 通过应用数据MQTT网络发送时,MQTT相关质量相关(Qos)和主题名(Topic)相关联

MQTT客户端

一个使用MQTT他总是在服务器的网络连接中建立协议的应用程序或设备。客户端可以:

  1. 发布其他客户端可能订阅的信息
  2. 订阅其他客户端发布的消息
  3. 退订或删除应用程序消息
  4. 断开连接到服务器

MQTT服务端

MQTT服务器又称消息代理(Broker),可以是一个应用程序或一台设备。它是位于消息发布者和订阅着之间,他可以

  1. 接受客户的网络连接
  2. 接受客户发布的应用信息
  3. 处理客户端的订阅和退订请求
  4. 想订阅的客户转发应用程序信息

发布/订阅、主题、会话

MQTT是基于发布(Publish)/订阅(Subscribe)通信和数据交换模式Http的请求(Request)/应答(Response)模式本质上是不同的 向消息服务器订阅主题。订阅成功后,消息服务器将主题下的消息转发给所有订阅者 主题(Topic)以/为分隔符区分不同层次。包括通配符 或#主题又称主题过滤器;不含通配符的主题名称

MQTT协议中的方法

MQTT该协议定义了一些表示确定资源的方法(也称为行动)。该资源可以代表预先存在的数据或动态生成的数据,这取决于服务器的实现。一般来说,资源只是服务器上的文件或输出。主要方法:

  1. CONNECT: 连接到服务器的客户端
  2. CONNACT: 连接确认
  3. PUBLISH: 发布消息
  4. PUBACK: 发布确认
  5. PUBREC: 发布的消息已被接受
  6. PUBREL: 发布的消息已经发布
  7. PUBCOMP: 发布完成
  8. SUBSCRIBE: 订阅请求
  9. SUBACK: 订阅确认
  10. UNSUBSCRIBE: 取消订阅
  11. UNSUBACK: 取消订阅确认
  12. PINGREQ:客户端发送心跳
  13. PINGRESP:客户端心跳响应
  14. DISCONNECT: 断开连接
  15. AUTI: 认证

MQTT协议数据包结构

MQTT协议中,一个MQTT数据包由:固定头,可变头,消息体构成,MQTT数据包结构如下:

  1. 固定头:存在于所有MQTT在数据包中,数据包接、发布、订阅、心跳等数据包连接、发布、订阅、心跳等,必须固定头部,所有类型MQTT固定头必须包含在协议中
  2. 可变头:存在于部分MQTT在数据包中,数据包的类型决定了可变头是否存在及其具体内容。变头不是可选的意思,而是指这部分再有协议类型中存在,在有些协议类型中不存在
  3. 消息体:存在于部分MQTT数据包中,表示客户端收到具体内容。与可变头一样,在有些协议类型中有消息内容,有些协议类型中没有消息内容

EMQX简介

MQTT属于物联网的通信协议,在MQTT协议中有两大角色:客户端(发布者/订阅者),服务器(MQTT broker);针对客户端和服务端需要遵循该协议的具体实现,EMQ/EMQX就是MQTT Broker的一种实现。 EMQ官网: https://www.emqx.io/cn/

EMQ X是什么

EMQ X基于Erlang/OTP 平台开发的MQTT消息服务器,是开源社区中最流行的MQTT消息服务器, EMQ X是开源百万级分布式的MQTT消息服务器(MQTT Messaging Broker),用于支持各种标准MQTT协议的设备,实现从设备端到服务器端的消息传递,以及从服务器端到设备端的设备控制消息转发。从而实现物联网设备的数据采集,和对设备的操作和控制

EMQ X与物联网平台的关系是什么

典型的物联网平台包括设备硬件、数据采集、数据存储、分析、Web/移动应用。EMQ X位于数据采集这一层,分别与硬件和数据存储、分析进行交互,是物联网平台的核心;前端硬件通过MQTT协议与位于数据采集层的EMQ X交互,通过EMQ X将数据采集后,通过EMQ X提供数据接口,将数据保存到后台的持久化平台中(各种关系型数据库和NOSQL数据库),或者流失处理框架等,上层应用通过这些数据分析后得到的结果呈现给最终用户

Docker安装

拉取: docker pull emqx/emqx:latest 运行:

docker run -d --name emqx -p 1883:1883 -p 8081:8081 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:latest

访问emqt的web管理页面 http://127.0.0.1:18083

#账号: admin

#密码: public

端口

	1883:MQTT 协议端口
	
	8883:MQTT/SSL 端口
	
	8083:MQTT/WebSocket 端口
	
	8080:HTTP API 端口
	
	18083:Dashboard 管理控制台端口

基本命令

如果采用的是非docker部署的,那么EMQX提供了一些常用的命令行工具,方便用户对EMQ X进行启动,关闭、进入控制台等操作

  • emqx start 后台启动EMQ X Broker
  • emqx stop
  • emqx restart
  • emqx console 使用控制台启动EMQX Broker
  • emqx foreground 使用控制台启动EMQ XBroker,与 emqx console不同,emqx foreground不支持输入Erlang命令
  • emqx ping Ping EMQ X Broker

客户端websocket消息收发

在EMQ XBroker提供了Dashboard中的 Tools 导航下的websocket 页面提供了一个简易但有效的webSocket客户端工具,它包含了连接、订阅、和发布功能,同时还能查看自己发送和接受的报文数据。

标签: 流量传感器p11231sn

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台