四层架构
感知层
传感层
平台层
应用层
定义
MQTT是一种基于发布/订阅模式的,轻量级的通讯协议,其架构于TCP/IP协议上,在物联网、移动应用等有着广泛的应用
一次典型的通信流程
1、发布者(publisher)连接到Broker
2、订阅者(Subscriber)连接到Broker,并订阅相关的主题(topic)
3、发布者向Broker发布了一条信息
4、Broker收到了发布方的信息,发现有订阅者订阅了相关主题,将消息转发给订阅者
5、订阅者从Broker接收该信息
市面主流的Broker
1、Mosquitto
2、EMQX
3、HiveMQ
4、ActiveMQ
1和2国内使用较多
Qos服务质量
1、QoS0,At most once,至多一次;
2、QoS1,At least once,至少一次;
3、QoS2,Exactly once,确保只有一次;
聊天室模型
1、每个聊天室都定义一个唯一的MQTT Topic
2、每个用户进入聊天室后,都订阅该Topic
3、如果有用户发言,则向该Topic发送一条信息
4、因为其他用户都订阅了该Topic,则都能收到发言者的信息
异构网络数据通信
需求:
1、局域网1和局域网2不能相互通信
2、局域网1的应用需要将业务状态通知给局域网2中的应用
3、局域网1和局域网2都能上外网
解决方案:
1、局域网1和局域网2的应用都跟MQTT Broker进行长连接通信
2、使用订阅/发布模式进行数据通信
移动端消息推送
需求
1、公共停车泊位车辆状态消息接受场景
2、车辆驶入或者驶离时,手持POS机必须能及时地收到车辆状态信息
解决方案
1、停车位的地磁在感应到车辆驶入或者驶离后,通过移动网络或者无线LoRa等方式,发布车辆状态消息到Broker
2、手持POS机通过订阅的方式,接收到车辆状态信息后,进行消息提醒。收费人员及时移动到相应位置,进行驶入登记或者收费处理等操作。
模拟测试
1、MQTT Explorer
功能齐全,简单易使用
2、MQTTX
功能齐全,界面精美,对话式
3、MQTT.fx
存在时间较久,支持执行JavaScript功能脚本,容易扩展实现自动化
选型考虑因素
基本需求
1、支持mqtt3.1/mqtt3.1.1协议(可选mqtt5.0)
2、支持QoS0、QoS1(可选QoS2)
3、支持验证
4、支持遗嘱消息
5、支持多种连接方式:TCP/WebSocket/SSL
高级需求
1、集群
2、支持共享订阅
3、规则引擎
主流库
C语言
libmosquitto(推荐)
Eclipse Paho C
如果MQTT Broker使用的是mosquitto,建议客户端使用libmosquitto进行开发
Java
Ecilpse Paho Java
Fusesource mqtt-client(推荐)
Javascript
Eclipse Paho HTML5 JavaScript over WebSocket
mqtt.js(推荐)
Python
Eclipse Paho Python - originally the mosquitto Python client(推荐)
MQTT for twisted python