MQTT协议的概念与应用

一、MQTT 协议概念及基础

协议全称:Message Queuing Telemetry Transport,消息队列传输探测

协议出处:出自 ISO 标准下的一种基于发布 - 订阅模式的消息协议,它是基于 TCP/IP 协议簇

应用目的:为了改善网络设备硬件的性能和网络的性能来设计的

应用范围:一般多用于 IoT 即物联网上,广泛应用于工业级别的应用场景,比如汽车、制造、石油、天然气等。

MQTT协议的工作原理类似于一个发布-订阅模型,它允许不同的设备或客户端通过一个称为“代理”(Broker)的中间件来交换消息。设备或客户端可以选择订阅(Subscribe)特定的主题(Topic),并从中接收来自代理的消息。同时,设备或客户端还可以发布(Publish)消息到一个或多个特定的主题(Topic),代理将转发这些消息给所有订阅该主题的设备或客户端。

 

二、MQTT协议具有以下优点:

  • 它是一种轻量级的协议,占用的带宽和资源很少;
  • 它具有很高的可靠性,能够保证消息的传递和接收;
  • 它支持异步通信和离线消息,即使设备不在线也能够接收和发送消息。
  • MQTT协议是物联网应用中最常用的一种协议,它能够帮助设备之间进行高效地通信,并为物联网应用提供了一个可靠、安全的消息传递机制。

三、发布 - 订阅模式

  1、传统的客户端 - 服务器架构的替代方案,因为一般传统的客户端-服务器是客户端能够直接和服务器进行通信。

  2、发布 - 订阅模式 pub/sub就不一样,区别如下:

  • 发布订阅模式会将发送消息的发布者 publisher与接收消息的订阅者 subscribers进行分离,
  • publisher 与 subscribers 并不会直接通信,他们甚至都不清楚对方是否存在,
  • 他们之间的交流由第三方组件 broker 代理。

  3、pub/sub 最重要的方面是 publisher 与 subscriber 的解藕,有下面三个维度:

    1)、空间解耦

      publisher 与 subscriber 并不知道对方的存在,例如不会有 IP 地址和端口的交互,也更不会有消息的交互。

    2)、时间解藕

      publisher 与 subscriber 并不一定需要同时运行。

    3)、同步 Synchronization 解藕

      两个组件的操作比如 publish 和 subscribe 都不会在发布或者接收过程中产生中断。

      总之,发布/订阅模式消除了传统客户-服务器之间的直接通信,把通信这个操作交给了 broker 进行代理,并在空间、时间、同步三个维度上进行了解藕。

四、可拓展性

    pub/sub 比传统的客户端-服务器模式有了更好的拓展,这是由于 broker 的高度并行化,并且是基于事件驱动的模式。可拓展性还体现在消息的缓存和消息的智能路由,还可以通过集群代理         来实现数百万的连接,使用负载均衡器将负载分配到更多的单个服务器上,这就是 MQTT 的深度应用了。

  事件驱动是一种编程范式,编程范式是软件工程中的概念,它指的是一种编程方法或者说程序设计方式,比如说面向对象编程和面向过程编程就是一种编程范式,事件驱动中的程序流程会由诸如           用户操作(点击鼠标、键盘)、传感器输出或者从其他程序或传递的消息事件决定。事件驱动编程是图形用户界面和其他应用程序比如 Web 中使用的主要范式,这些应用程序能够响应用户输入         执行某些操作为中心,这同时也适用于驱动程序的编程。

五、消息过滤

  在 pub/sub 的架构模式中,broker 扮演着至关重要的作用,其中非常重要的一点就是 broker 能够对消息进行过滤,使每个订阅者只接收自己感兴趣的消息。broker 有几个可以过滤的选项:

1、基于主题的过滤

  MQTT 是基于 subject 的消息过滤的,每条消息都会有一个 topic ,接收客户端会向 borker 订阅感兴趣的 topic,订阅后,broker 就会确保客户端收到发布到 topic 中的消息。

2、基于内容的过滤

  在基于内容的过滤中,broker 会根据特定的内容过滤消息,接受客户端会经过过滤他们感兴趣的内容。这种方法的一个显著的缺点就是必须事先知道消息的内容,不能加密或者轻易修改。

3、基于类型的过滤

      在使用面向对象的语言时,基于消息(事件)的类型过滤是一种比较常见的过滤方式。

  为了发布/订阅系统的挑战,MQTT 具有三个服务质量级别,你可以指定消息从客户端传到 broker 或者从 broker 传到客户端,在 topic 的订阅中,会存在 topic 没有 subscriber 订阅的情况,作为           broker 必须知道如何处理这种情况。

六、MQTT 与消息队列的区别

         MQTT 是一种消息队列传输探测协议,这种协议是看似是以消息队列为基础,但却与消息队列有所差别。

  在传统的消息队列模式中

  一条消息会存储在消息队列中等待被消费,每个传入的消息都存储在消息队列中,直到它被客户端(通常称之为消费者)所接收,如果没有客户端消费消息的话,这条                   消息就会存在消息队列中等待被消费。但是在消息队列中,不会存在消息没有客户端消费的情况,

  在传统的消息队列模式中,一条消息只能被一个客户端所消费,负载会分布在队列的每个消费者之间;

  在传统的消息队列模式中,必须使用单独的命令来显式创建队列,只有队列创建后,才可以生产或者消费消息;

  MQTT

       确存在 topic 无 subscriber 订阅的情况。

  在 MQTT 中,每个订阅者都会受到消息,每个订阅者有相同的负载。

  而在 MQTT 中,topic 比较灵活,可以即时创建。

posted @   星火撩原  阅读(234)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示

目录导航