MQTT(Message Queue Telemetry Transport)协议_云起网
您现在的位置是:首页 > 技术文章 >

MQTT(Message Queue Telemetry Transport)协议

未知 2020-09-09 17:00
MQTT是什么,发布订阅,REST和结构。学习它的好处和如何使用它!
什么是MQTT?
  • 一种消息协议,具有很少的代码和带宽。
  • MQTT是一种基于发布订阅的消息传递协议.
  • 在TCP/IP之上。
  • 需要一个broker (如 mosquito, hivemq, azure IO Hub).
  • ISO标准(ISO/IEC PRF 20922)。
  • 用于:不可靠、高延迟、低带宽的消息总线
  • 带纯字节数组的有效负载。
MQTT PUB/SUB
  • 协议使用发布/订阅与HTTP的请求/响应范式形成鲜明对比的体系结构。
  • 发布/订阅是事件驱动的,可以将消息推送到客户端。
  • 中心通信点是MQTT broker,它负责发送者和接收者的消息分发.
  • 每个客户发生消息到broker,包括topic。
  • 每个想要接收消息的客户端对Topic订阅,broker将所有具有匹配Topic的消息传递给客户端。
  • 因此客户不必互相了解,他们只和这个Topic进行交流。
  • 该体系结构支持高度可伸缩的解决方案,而不需要数据之间的依赖关系。数据生产者和消费者。
REST
  • HTTP/REST对于处理文档和资源非常有用。
  • MQTT对于处理消息非常有用。
  • HTTP/REST可能很复杂,并不总是简单消息的最佳解决方案。
  • MQTT数据包大小为2字节+有效载荷。
  • MQTT支持1对1、1对多、多对多的消息.
  • 请求和响应VS发布者和订阅者。

结构
HTTP的不同之处在于,客户机不必提取它需要的信息,但是broker会将信息推送给客户端,以防出现新的情况。
 
因此,每个MQTT客户端都有一个永久的tcp连接到broker。如果此连接被任何情况中断,MQTT broker可以缓冲所有消息,并在联机时将它们发送到客户端。
 
如前所述,MQTT中用于分发消息的中心概念是Topic。Topic是一个简单的字符串,可以有多个的层次结构,用斜杠隔开。
 
发送客厅温度数据的示例Topic可以是:house/living-room/temperature。
 
客户端可以订阅确切的主题(Topic),也可以使用通配符。
订阅 
house/+/temperature 将导致将所有消息发送到前面提到的主题。house/living-room/temperature以及任何在起居室中具有任意价值的主题,例如:house/kitchen/temperature
 
加号是单级并且只允许一个层次结构的任意值。如果您需要订阅多个级别,例如整个子树,也有一个多级通配符 (#)。它允许订阅所有底层层次结构级别。例如,house/#订阅所有主题以house开头的主题。
 
有效负载
MQTT与有效负载无关
  • 一个简单的byte array
  • 简单的string
  • 或者是JSON

JSON格式发布消息到主题 home/livingroom/light/1如下图。
PUBLISH
 
安全
  • SSL/TLS 支持
  • Username/Password
  • Encrypt payload (data/payload agnostic)
  • IoT security should not be underestimated!
  • SSL/TLS is a must-have
     
Broker and Clients
  Broker是类似服务端的一个中间件,用于分发消息,起到路由功能。
  • Mosquitto
  • HivenMQ
  • Azure IoT Hub
  • MQTT.fx
  • Eclipse Paho
  • MQTTnet
 
代码样本
下面的示例是用.NET Core console项目来测试实现。以下是代码截图,如果需要可以从git下载代码。
 
该解决方案包含三个项目,如下所示,所有项目都引用了MQTTnet。
mqtt basics
 
Broker 
发布者程序和订阅者程序都连接到Broker 
Publisher and Subscriber
 
 
publisher 消息发布者
publisher
以下是模拟Publish方法:
 
SimulatePublish method
 
subscriber
subscriber
执行
下面是运行解决方案的屏幕截图。
Publisher and Subscribers
 
Publisher and Subscribers连接到Broker。
Publisher/Subscriber/Broker in action
 
Publisher/Subscriber/Broker in action
 
摘要
这是对MQTT及其用法的非常基本的介绍。为了保持讨论的简单性,我将代码保持在最低限度。Publisher/Subscriber 模式非常强大,允许我们轻松地创建解耦的应用程序,使用MQTTNet库可以很容易地在我们的应用程序中实现这个模式。您可以从下面的源代码链接上从我的git存储库下载示例。
 
Git
git clone https://github.com/jawadhasan/mqttBasic.git
 
参考
https://www.hivemq.com/blog/how-to-get-started-with-mqtt/
https://github.com/chkr1011/MQTTnet/wiki/Client
https://dzone.com/articles/mqtt-message-queue-telemetry-transport



(吃猫的鱼)