营销型网站建设明细,软件开发报价明细,升级wordpress 另一更新正在进行,深圳传媒公司MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上#xff0c;是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议#xff0c;为此#xff0c;它需要一个消息中间件 。 MQTT是一个… MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议为此它需要一个消息中间件 。 MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的这些特点使它适用范围非常广泛。在很多情况下包括受限的环境中如机器与机器M2M通信和物联网IoT。其在通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。 中文名 :消息队列遥测传输 外文名: MQTTMessage Queuing Telemetry Transport 性 质:即时通讯协议
MQ 遥测传输 (MQTT) 是轻量级基于代理的发布 / 订阅的消息传输协议设计思想是开放、简单、轻量、易于实现。这些特点使它适用于受限环境。例如但不仅限于此
网络代价昂贵带宽低、不可靠。在嵌入设备中运行处理器和内存资源有限。
该协议的特点有
使用发布 / 订阅消息模式提供一对多的消息发布解除应用程序耦合。对负载内容屏蔽的消息传输。使用 TCP/IP 提供网络连接。有三种消息发布服务质量 “至多一次”消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况环境传感器数据丢失一次读记录无所谓因为不久后还会有第二次发送。“至少一次”确保消息到达但消息重复可能会发生。“只有一次”确保消息到达一次。这一级别可用于如下情况在计费系统中消息重复或丢失会导致不正确的结果。小型传输开销很小固定长度的头部是 2 字节协议交换最小化以降低网络流量。使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制。
一、MQTT 协议概念
MQTT 协议的全称是 Message Queuing Telemetry Transport翻译为消息队列传输探测它是 ISO 标准下的一种基于发布 - 订阅模式的消息协议它是基于 TCP/IP 协议簇的它是为了改善网络设备硬件的性能和网络的性能来设计的。
IoT 设备要运作就必须连接到互联网设备才能相互协作以及与后端服务协同工作。而互联网的基础网络协议是 TCP/IPMQTT 协议是基于 TCP/IP 协议栈而构建的因此它已经慢慢的已经成为了 IoT 通讯的标准。
MQTT 可以被解释为一种低开销低带宽占用的即时通讯协议可以用较少的代码和带宽为远程设备连接提供实时可靠的消息服务它适用于硬件性能低下的远程设备以及网络状况糟糕的环境下因此 MQTT 协议在 IoTInternet of things物联网小型设备应用移动应用等方面有较广泛的应用。
优点代码量少开销低带宽占用小即时通讯协议。 二、MQTT 基础
上面我们解释了 MQTT 协议的基本概念MQTT 协议总结一点就是一种轻量级的二进制协议MQTT 协议与 HTTP 相比具有一个明显的优势数据包开销较小数据包开销小就意味着更容易进行网络传输。还有一个优势就是 MQTT 在客户端容易实现而且具有易用性非常适合当今资源有限的设备。
你可能对这些概念有些讳莫如深为什么具有 xxx 这种特性呢这就需要从 MQTT 的设计说起了。
MQTT 协议由 Andy Stanford-Clark (IBM) 和 Arlen NipperArcom现为 Cirrus Link于 1999 年发明。 他们需要一种通过卫星连接石油管道的协议以最大限度地减少电池损耗和带宽。所以他们为这个协议规定了几种要求
1、这个协议必须易于实现
2、这个协议中的数据必须易于传输消耗成本小
3、这个协议必须提供服务质量管理
4、这个协议必须支持连续的会话控制
5、假设数据不可知不强求传输数据的类型与格式保持灵活性。
这些设计也是 MQTT 的精髓所在MQTT 经过不断的发展已经成为了物联网 IoT 所必备的一种消息探测协议官方强烈推荐使用的版本是 MQTT 5。
三、发布 - 订阅模式
发布 - 订阅模式我相信接触消息中间件架构的同学都听过这是一种传统的客户端 - 服务器架构的替代方案因为一般传统的客户端-服务器是客户端能够直接和服务器进行通信。
但是发布 - 订阅模式 pub/sub就不一样了发布订阅模式会将发送消息的发布者 publisher与接收消息的订阅者 subscribers进行分离publisher 与 subscribers 并不会直接通信他们甚至都不清楚对方是否存在他们之间的交流由第三方组件 broker 代理。
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 比较灵活可以即时创建。