概述
MQTT协议与EMQ
MQTT协议简介
简介
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建与TCP/IP协议上,由IBM在1999年发布。MQTT最大的优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较为广泛的应用。
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的。这些特点使他适用范围非常广泛。在很多情况下,包含首先的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其他,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型设备中广泛应用。
MQTT协议设计规范
由于物联网的环境非常特别的,所以MQTT遵循以下设计原则:
- 精简,不添加可有可无的的功能
- 发布/订阅模式,方便消息在传感器之间传递,解耦Client/Server模式,带来的好处在于不必预先知道对方存在(IP/Port),不必同时运行
- 允许用户动态创建主题(不需要预先创建主题),零运维成本
- 把传输量降到最低以提高传输效率
- 把低带宽、高延迟、不稳定的网络等因素考虑在内
- 支持连续会话保持和控制(心跳)
- 理解客户端计算能力可能很低
- 提供服务质量(Quality of service :Qos)管理
- 不强求传输数据的类型与格式,保持灵活(只应用业务数据)
MQTT协议主要特性
MQTT协议工作在低带宽、不可靠的网络远程传感器和控制设备通讯而设计的协议,它具有一些主要特性:
- 开放消息协议,简单实现
- 使用发布/订阅模式,提供一对多的消息发布,解除应用程序耦合
- 对负载(协议携带的应用数据)内容屏蔽的消息传输
- 基于TCP/IP网络连接,提供有序、无损的双向连接
主流的MQTT是基于TCP连接进行数据推送的,但是同样有基于UDP的版本,叫做MQTT—SN。这两种版本由于基于不同的连接方式,优缺点自然也就各有不同了- 消息服务质量(Qos)支持,可靠传输保证:有三种发布服务质量
- QoS1:“至多一次”,消息发布完全依赖底层TCP/IP‘网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久还会有第二次发送,这种方式主要普通的APP的推送,倘若您的智能设备在消息推送未联网,推送过去没收到,再次联网也就收不到了
- QoS2:“至少一次”,确保消息到达,但消息重复可能会发生
- QoS3:“只有一次”,确保消息到达一次 。在一些重要比较严格的计费系统中,可以使用此级别,在计费系统中,消息重复或丢失导致不正确的结果,这种最高质量的消息发布服务还可以用于即时通讯类的APP的推送,确保用于只会收到一次
- 1字节固定报头,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协议的应用程序或者设备,他总是建立到服务器的网络连接。客户端可以:
- 发布其他客户端可能会订阅的信息
- 订阅其他客户端发布的消息
- 退订或删除应用程序的消息
- 断开与服务器连接
MQTT服务端
MQTT服务器又称为“消息代理”(Broker),可以是一个应用程序或一台设备。它是位于消息发布者和订阅着之间,他可以
- 接受来自客户的网络连接
- 接受客户发布的应用消息
- 处理来自客户端的订阅和退订请求
- 想订阅的客户转发应用程序消息
发布/订阅、主题、会话
MQTT是基于发布(Publish)/订阅(Subscribe)模式来进行通信及数据交换的,与Http的请求(Request)/应答(Response)的模式有本质的不同
订阅者会向消息服务器订阅一个主题。成功订阅后,消息服务器会将该主题下的消息转发给所有的订阅者
主题(Topic)以“/”为分隔符区分不同的层级。包含通配符“+”或“#”的主题又称为主题过滤器;不含通配符的成为主题名
MQTT协议中的方法
MQTT协议中定义了一些方法(又称为动作),对于表示对确定资源所进行操作。这个资源可以代表预先存在的数据或动态生成数据,这取决于服务器的实现。通常来说,资源只服务器上的文件或输出。主要方法:
- CONNECT: 客户端连接到服务器
- CONNACT: 连接确认
- PUBLISH: 发布消息
- PUBACK: 发布确认
- PUBREC: 发布的消息已接受
- PUBREL: 发布的消息已释放
- PUBCOMP: 发布完成
- SUBSCRIBE: 订阅请求
- SUBACK: 订阅确认
- UNSUBSCRIBE: 取消订阅
- UNSUBACK: 取消订阅确认
- PINGREQ:客户端发送心跳
- PINGRESP:客户端心跳响应
- DISCONNECT: 断开连接
- AUTI: 认证
MQTT协议数据包结构
MQTT协议中,一个MQTT数据包由:固定头,可变头,消息体构成,MQTT数据包结构如下:
- 固定头:存在于所有的MQTT数据包中,表示数据包类型及数据包的分组类标识,如连接,发布,订阅,心跳等,其中固定头是必须的,所有类型的MQTT协议中,都必须包含固定头
- 可变头:存在于部分MQTT数据包中,数据包类型决定了可变头是否存在及其具体内容。可变头不是可选的意思,而是指这部分再有协议类型中存在,在有些协议类型中不存在
- 消息体:存在于部分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客户端工具,它包含了连接、订阅、和发布功能,同时还能查看自己发送和接受的报文数据。
最后
以上就是瘦瘦唇彩为你收集整理的MQTT协议与EMQMQTT协议与EMQ的全部内容,希望文章能够帮你解决MQTT协议与EMQMQTT协议与EMQ所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复