一.定义

MQTT(Message Queuing Telemetry Transport)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。

基于发布/订阅模式:
轻量级:低带宽,可靠传输,通过QOS控制
使用TCP/IP协议,处于应用层的协议,支持TLS安全传输
物联网领域应用:适合传感器

MQTT协议_MQTT

二.适用的场景

协议设计之初用,天然气管道的数据采集,通过卫星通信(遥感传输),传输到中心节点MQTT Broker可通过SCADA协议,传输到应用平台。

前端采集设备数量多
每次传输的消息数据量很小
低带宽,对网络流量有较高的要求
会出现网络不稳定

三.MQTT Clinet与MQTT Broker

1.MQTT Broker

MQTT服务器,负责处理客户端的订阅和取消订阅,还有消息发布者的请求,对安全性和可靠性要求高,常用EMQ X。

Mosquitto:

Eplipse下的开源项目,遵循EPL/EDL许可;
支持MQTT协议的3.1和3.1.1版本,提供QOS。
支持TLS/SSL的加密通信,支持基于用户名密码认证、访问控制列表ACL
Mosquitto支持集群方式进行扩展
跨平台支持Linux、Windows、macOS
丰富的配置选项

EMQ X:

支持丰富的物联网协议,包括 MQTT、MQTT-SN、CoAP、 LwM2M、LoRaWAN 和 WebSocket等;
单机百万级别和集群千万级别的MQTT连接,毫秒级消息转发;
灵活的扩展性,可以实现私有协议、认证鉴权、数据持久化、桥接转发和管理控制台等的扩展;
中国本地的技术支持服务,通过微信、QQ等线上渠道快速响应客户需求;
基于Apache2.0开源协议;
EMQ X 3.0 支持 MQTT 5.0 协议,完全兼容MQTT V3.1 和 V3.1.1 协议;
桥接:EMQ X 可以跟别的消息系统进行对接,支持将消息转发到Kafka、RabbitMQ;
共享订阅:共享订阅支持通过负载均衡的方式在多个订阅者之间来分发 MQTT 消息。

MQTT协议_MQTT_02

MQTT Clinet

可以是嵌入式设备也可以是软件服务,很多开发语言都有MQTT库,如java、JavaScript、Python等

四.QOS服务等级

订阅者和发布者OQS级别要选同一级的,初始配置时就配置同一级别。

级别

描述

场景

QOS 0 

at most once 最多一次

没有握手,有没有接收不关心,只发送一次,不重发

QOS 1

at least once 最少一次

一次握手,发送者只需要收到一次确认ACK消息,可能重发(常用)

QOS 2

exactly once 确保一次

类似TCP/IP四次挥手,每次发送消息必须收到确认消息。