文章

MQTT协议理解

MQTT协议理解

MQTT协议理解

MQTT由来

MQ TT中间带空格,MQ Telemetry Transport,用于遥测传输。

MQTT和消息队列

  • 传统消息队列:数据量大,客户端数量少。
  • MQTT:主要用于物联网设备之间的消息传递,这类场景特点是海量的设备接入、管理与消息传输。

发布订阅和请求响应模式区别

发布订阅适用于处理时间不确定的异步处理。请求响应模式如网页接口请求则追求尽可能的快速返回结果。

  • 服务端向主题发布指令,设备执行指令有耗时,避免请求线程等待,转为异步。
  • 设备执行完成后,服务端订阅主题获取执行结果。

消息代理作用

原来只有两种角色,服务端和客户端。引入第三者消息代理(broker)作为协调者,最基础的功能如消息主题需要管理,以及其他更复杂。

消息原子性和共识

引入第三者代理后,功能变多,但系统复杂度也增加,主要在消息转发。

  • 消息经过中转,引入Qos概念。
  • 会产生半连接,避免产生消息黑洞,引入keepAlive机制自动断连。
  • 为避免消息重发,引入唯一消息id。但消息id耗尽时(如long型自增到了极值)需要对旧消息复用,又引入了DUP标记消息是否重复。
  • 共识是一个双(多)方一来一回请求响应的过程
  • 要保证Qos2保证只发送一次,需要保证信息的原子性,需要对消息id和消息DUP重复标记这两个信息分别达成共识(使用两次请求响应,分别确认消息已收到和消息id可以复用)
  • Qos2的两次确认会降低消息处理速度,在Qos1上实现,可以在业务层加入规则如时间戳等保证消息的唯一,做重复消息判断。

连接管理

引入第三者代理后,不再是原来的客户端和服务端直连。

  • 容易产生半连接。服务端连到了代理,但客户端没连上。
  • 尽而引发通信黑洞,已知收不到,还不停的发消息。 引入keepAlive机制自动断连。
本文由作者按照 CC BY 4.0 进行授权