啥MQ ,MQTT 的 ? 他们不都是消息队列吗

好记忆不如烂笔头,能记下点东西,就记下点,有时间拿出来看看,也会发觉不一样的感受.

有兄弟会对MQ,MQTT 的有所迷糊,为啥,因为很多兄弟对这两货都不熟悉,也不了解。如今深入学习MQ和MQTT的相关知识。MQ是消息队列中间件的英文简称,MQTT则是MQ Telemetry Transport的缩写,是一种基于发布/订阅模式的消息传输协议。以下是对它们的各个层面的深度讲解:

一、MQ是什么?

消息队列(MQ)是一种在消息的产生者和消费者之间传递消息的机制,它允许应用程序将消息发送到队列中,接收者从队列中取出消息进行处理。消息队列中间件(如RabbitMQ、ActiveMQ等)是实现消息队列机制的软件系统,它提供了消息的存储、转发、可靠性保证等功能。

1. 消息队列的基本概念

  • 消息(Message):是应用程序间传递的数据单元,可以是文本、二进制数据等。

  • 队列(Queue):是消息的存储结构,用于暂存消息,直到接收者取出并处理。

  • 生产者(Producer):是发送消息到队列中的应用程序。

  • 消费者(Consumer):是从队列中接收消息并处理的应用程序。

2. 消息队列的原理

消息队列的原理可以简单概括为以下几个步骤:

  1. 消息发送:生产者将消息发送到消息队列中间件中的指定队列。

  2. 消息存储:消息队列中间件接收到消息后,将其存储在队列中。

  3. 消息接收:消费者连接到消息队列中间件,并从队列中取出消息进行处理。

3. 消息队列的组成

  • 消息中间件服务器:负责接收、存储和转发消息。它提供了网络通信、消息存储、消息调度等功能。

  • 生产者客户端:生产者应用程序通过消息中间件提供的API将消息发送到服务器。

  • 消费者客户端:消费者应用程序通过消息中间件提供的API从服务器获取消息并进行处理。

4. 消息队列的特性

  • 可靠性:消息队列中间件确保消息能够可靠地传递。如果网络出现中断或消费者暂时不可用,消息队列中间件会将消息存储起来,直到消费者能够正常接收消息。这保证了消息不会丢失。

  • 顺序性:消息队列可以保证消息的顺序性,即按照生产者发送消息的顺序传递给消费者。这对于需要严格按照顺序处理业务逻辑的应用场景非常重要。

  • 异步性:生产者和消费者无需同时在线,生产者发送消息后可以立即继续执行其他任务,消费者在需要时再从队列中获取消息,实现了生产者和消费者的解耦。

二、MQTT是什么?

MQTT(Message Queue Telemetry Transport)是一种轻量级的消息传输协议,它基于发布/订阅模型,专为低带宽、高延迟或不可靠的网络环境设计,常用于物联网(IoT)领域。MQTT的核心思想是通过一个消息代理(Broker)在设备(订阅者)和服务器(发布者)之间进行消息的分发和传递。

1. MQTT的基本概念

  • 消息代理(Broker):是MQTT协议中的中间节点,负责接收来自客户端的消息,并将消息分发给订阅了相关主题的客户端。

  • 发布者(Publisher):是发送消息的客户端,它可以是传感器、设备或其他应用程序。

  • 订阅者(Subscriber):是接收消息的客户端,它可以是应用程序、服务器或其他设备。

  • 主题(Topic):是消息的分类标识符,用于将消息分组。订阅者通过订阅特定主题来接收相关消息。

2. MQTT的工作原理

MQTT的工作原理可以分为以下几个步骤:

  1. 连接建立:客户端(发布者和订阅者)通过TCP/IP协议连接到消息代理。

  2. 主题订阅:订阅者向消息代理发送订阅请求,指定要订阅的主题。

  3. 消息发布:发布者将消息发送到指定主题。

  4. 消息分发:消息代理接收到消息后,根据订阅者订阅的主题,将消息分发给相应的订阅者。

  5. 消息接收:订阅者从消息代理接收消息并进行处理。

3. MQTT的连接流程

  • 客户端连接到代理:客户端通过TCP/IP协议与消息代理建立连接,连接请求中包含客户端标识符、用户名和密码等信息。

  • 代理验证连接:消息代理验证客户端的连接请求,如果验证成功,建立连接。

  • 订阅主题:订阅者通过SUBSCRIBE数据包向消息代理发送订阅请求,指定要订阅的主题。

  • 发布消息:发布者通过PUBLISH数据包将消息发送到指定主题。

  • 消息分发:消息代理接收到消息后,根据主题匹配规则,将消息分发给订阅了该主题的订阅者。

  • 消息确认:根据QoS级别,订阅者向消息代理发送确认消息,确保消息已正确接收。

4. MQTT的消息可靠性

MQTT提供了三种服务质量(QoS)级别,以满足不同场景下的消息传输需求:

  • QoS 0:最多一次,消息最多被传递一次,但可能会丢失。这种级别的消息传输消耗最少,吞吐量最高。

  • QoS 1:至少一次,消息至少被传递一次,但可能会重复。消息代理会存储消息,直到收到订阅者的确认消息。

  • QoS 2:恰好一次,消息被传递一次且仅一次。这种级别使用四阶段握手机制来确保消息的精确传递,但会增加网络开销。

5. MQTT的消息主题与通配符

  • 消息主题:消息主题是用于对消息进行分类的字符串,结构上类似文件路径(例如,sensor/temperaturesensor/humidity)。主题可以是一个简单的单词或词组,也可以包含多层次的层级结构。

  • 通配符:MQTT支持两种通配符:

    • +:匹配单层主题。例如,sensor/+可以匹配sensor/temperature,但不能匹配sensor/room/temperature

    • #:匹配多层主题。例如,sensor/#可以匹配sensor/temperaturesensor/room/temperature等。

三、MQ和MQTT的区别

表格

复制

特性MQ (消息队列)MQTT
应用领域适用于企业级应用、分布式系统、微服务架构等。适用于物联网(IoT)、移动应用、低带宽网络环境等。
消息模型点对点模型,生产者直接发送消息给消费者。发布/订阅模型,发布者通过主题间接向订阅者发送消息。
网络带宽通常适用于较稳定的网络环境,对带宽要求较高。针对低带宽、高延迟网络优化,开销小。
设备类型可以应用于各种类型的服务器和设备。主要适用于资源受限的设备(如传感器、微控制器)。
安全性提供多种安全机制,如加密、认证等。原生支持有限的安全机制,但可通过TLS/SSL加密传输。

四、MQ和MQTT的使用场景

(一)MQ的使用场景

  • 企业级应用集成:在企业内部,不同系统(如ERP、CRM、财务系统等)之间需要进行数据交换和集成。通过消息队列,可以实现系统间的异步通信,提高系统的耦合性和可靠性。

  • 分布式系统:在分布式系统中,各个微服务之间需要进行消息传递。消息队列可以作为微服务之间的通信桥梁,确保消息的可靠传递和顺序性。

  • 任务队列:用于处理需要异步执行的任务,如视频转码、订单处理等。生产者将任务放入队列,消费者从队列中取出任务并执行。

(二)MQTT的使用场景

  • 物联网(IoT):在智能家居、智能城市、工业物联网等场景中,设备(如传感器、智能灯泡、智能门锁等)通过MQTT协议将数据发送到服务器,用户可以通过服务器监控和控制设备。

  • 移动应用:在移动应用中,由于网络环境不稳定,MQTT可以提供可靠的消息传递,用于推送通知、实时聊天等功能。

  • 远程监控:用于远程监控环境数据、设备状态等。

五、MQ和MQTT使用时的注意事项

(一)MQ使用时的注意事项

  1. 性能调优:消息队列的性能受到多种因素的影响,如队列大小、消息大小、消费者数量等。需要根据实际应用场景进行性能调优,以满足系统的性能需求。

  2. 可靠性保障:确保消息队列中间件的高可用性,通过配置多节点集群、备份等机制避免单点故障。

  3. 安全性设置:启用消息队列中间件的安全机制,如SSL/TLS加密、用户认证、访问控制等,防止未授权访问和数据泄露。

(二)MQTT使用时的注意事项

  1. 网络稳定性:虽然MQTT适用于低带宽、高延迟网络,但仍需确保网络的基本稳定性,以避免连接频繁中断。

  2. 资源限制:在资源受限的设备上使用MQTT时,需要注意设备的内存、CPU等资源限制,避免过度消耗资源。

  3. 消息顺序性:MQTT在某些情况下可能会出现消息顺序不一致的问题,需要根据业务需求采取适当的措施来保证消息顺序。

通过以上深入讲解,同学们应该对MQ和MQTT有了全面的理解。在实际应用中,需要根据具体需求选择合适的消息传输机制,以实现高效、可靠的消息传递。

相知不迷路,来者皆是兄弟,搜索微信公众 :“codingba” or “码出精彩” 交朋友,有更多资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值