MQTT
1.MQTT是什么(消息队列遥测传输)
IOS标准下基于发布/订阅范式的消息协议
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的
1.1使用的条件
它工作在TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅消息协议,为此,它需要一个消息中间件
2.应用场景
用一句话概括就是,把所有物品通过信息传感设备与互联网连接起来,进行信息交换,即物物相息,以实现智能化识别和管理。
智能家居物联平台的应用框图:
client层:指的是IoT设备,可以是冰箱、空调,也可以是一些温湿度传感器。
gateway层:大多数场景中gateway是家里的WiFi路由器,也有小部分是基于Zigbee或蓝牙的网关设备。智能生活场景中的gateway数量相对于工业领域要少很多,在工业领域存在大量的边缘计算放在gateway层进行处理(雾计算)。
cloud云层:这里是集中处理业务的地方。
应用层:这一层是直接与用户打交道的地方,可以是通过电脑的Web浏览器、手机App,也可以是有屏幕的智能设备的显示器。随着语音技术的发展,无屏设备也可以通过语音交互,作为一个应用存在于物联网的交互层。
MQTT是一个长连接的通讯应用层协议,最大的特点是数据精简、消息可靠、Publish-Subscribe模式灵活易用。MQTT已经成为IoT传输的标准协议,应用非常广泛。下图中Client指的是物联网设备。Client通过对Topic的订阅和发布数据管理应用中的数据流动,而Broker是MQTT应用中用于管理Topic的角色。Server是物联网应用中的服务端,用于处理业务逻辑。
温度传感器用于接收温度,并把文档通过MQTT发送到Server端,在Server端进行业务处理,根据温度计算出穿衣提示,通过MQTT把数据发送到特定的Topic,App订阅Topic获取数据后进行展现。
3.特点
MQTT协议是大量计算能力有限,且工作在底宽度、不可靠的网络远程传感器和控制通讯而设计的协议
3.1.使用发布/订阅消息模式,提供一对多的消息发布,接触应用程序耦合;
3.2.对负载内容屏蔽的消息传输
3.3.使用TCP/IP提供网络连接
4.有三种 消息发布服务质量
至多一次,消息发布完全依赖底层TCP/IP网络,会发生消息丢失和重复。这一级别可用于如下情况,
环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
至少一次,确保消息到达,但消息重复可能会发生
只有一次,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果
5.小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量
6.使用Last Will和Testament特性通知有关各方客户端异常中断的机制
1.EMQ X是什么
emq x是开源百万级分布式MQTT消息服务器
2.为什么选择EMQ X
emq x与别的mqtt服务器相比,有以下的优点
emq x支持丰富的物联网协议:MQTT、MQTT-SN、CoAP、LwM2M、LoRaWAN和WebSocket等
支持超大规模的设备连接,企业版单机能支持百万的MQTT连接,集群能支持千万级别的MQTT连接
易于安装和使用
灵活的扩展性,支持企业的一些定制场景
中国本地的技术支持服务,通过微信、qq等线上渠道快速响应客户需求
3.EMQ X与物联网平台的关系是什么
典型的物联网平台包括设备硬件、数据采集、数据存储、分析、web/移动应用等。EMQ X位于数据采集这一层
4.MQTT和HTTP协议相比,有何优点和弱点
http协议是一个无状态的协议,每个http请求为TCp短连接,每次请求都需要重新创建一个tcp连接,而mqtt协议为长
连接协议,每个客户端都会保持一个长连接,与http协议相比优势在于
MQTT服务器搭建
启动emqx.cmd start
浏览器打开http://127.0.0.1:18083,输入默认用户名“admin”和默认密码“public”
“Stats(1)”表格中,显示的是客户端和Topic的一些基本信息,比如“Clients/Count”的数目为0,
表示目前连接的客户端数目为0;“Client/Max”表示的是连接曾经达到的最大值等
测试消息发布/订阅功能
1.建立MQTT连接 create MQTT Client/Max
指定连接相关信息,包括连接名称(可以随意输入)、协议(选择mqtt/tcp)和主机地址(安装在本地,MQTT缺省端口为1883,所以输入127.0.0.1:1883),
然后单击“Save”保存
2.开启一个订阅
“Topic to subscribe”里填入要订阅的主题“windows”;“QoS”字段选择“0 - Almost Once”;然后点击“Subscribe”按钮
3.发布
“Topic to publish”中输入“windows”,这里输入的主题的名字必须和订阅那里的输入相同;“QoS”中选择“0 - Almost Once”;“Payload”中输入任何内容都可以,
如下图所示输入了一组JSON字符串;所有内容输入完毕之后,点击“Publish”按钮
4.查看控制台
打开EMQ的管理员控制台,可以看到一些相关的统计数据已经发生了变化。比如在“The messages data”表格中,“qos0/received”的值为1,
说明EMQ收到了1条QoS0的消息;“qos0/sent”的值为1,表示EMQ转发了一条QoS0的消息。