bijw@yiqisoft.cn 发布的文章

MQTT 与 MQ 的区别

MQTT(Message Queuing Telemetry Transport)MQ(Message Queue) 都涉及消息传递,但 MQTT 是一种通信协议,MQ 是一种消息队列系统。

MQTT(Message Queuing Telemetry Transport)

  • 通信协议: MQTT是一种轻量级的通信协议,设计用于在低带宽、不稳定网络环境中传输消息,常用于工业物联网。
  • 发布-订阅模式: 它采用发布/订阅模式,通过中间的消息代理(Broker)协调消息发布者和订阅者之间的通信。

截屏2023-11-17 15.50.24.png

MQTT的特点:

  1. 轻量级: MQTT 协议非常轻量,占用的网络带宽和计算资源相对较少,适用于受限制的网络环境和嵌入式设备。

  2. 异步通信: MQTT 支持异步通信方式,发布者发布消息后不需要等待订阅者的响应,提供了松耦合的消息传输。

  3. 发布-订阅模式: MQTT 使用发布-订阅模式,发布者将消息发布到特定的主题(Topic),而订阅者订阅相同的主题,只接收订阅的消息。

  4. 持久化消息: MQTT 支持消息的持久化,当订阅者不在线时,可以将消息保存在消息代理(Broker)中,订阅者上线后可以接收到之前发布的消息。

  5. QoS (Quality of Service): MQTT 提供了三个不同的消息传输质量级别(QoS):0、1 和 2。QoS 0 是最低的级别,消息传输不保证可靠性,QoS 1 和 QoS 2 提供了不同的机制来确保消息的可靠传输。

    a. QoS 0:最多一次传递

    • 这是最低级别的服务质量,消息会被尽力发送一次,但不保证消息是否被接收。
    • 消息会以"最多一次"的方式传递,可能会导致消息的丢失或重复。

    b. QoS 1:至少一次传递

    • 这一级别确保消息至少被传递一次,但可能会导致消息的重复。
    • 发送者会等待接收者的确认,以确保消息被成功接收。如果没有收到确认,发送者会尝试重新发送。

    c. QoS 2:只有一次传递

    • 这是最高级别的服务质量,确保消息只被传递一次。
    • 发送者和接收者都会等待对方的确认,以确保消息的精确传递。这种级别会消耗更多的资源,但可以确保消息的可靠性。

MQ(Message Queue)

  • 消息队列系统: MQ是指消息队列系统,是一种软件服务,用于在分布式系统中存储、传递和接收消息。消息队列系统提供了一种解耦应用组件的方式,允许它们异步通信。
  • 消息存储和传递: MQ系统通常包含消息代理(Queue Manager)和消息队列(Queue),消息被放入队列并按顺序处理,确保消息的可靠传递。
  • 应用场景: MQ系统广泛应用于企业集成、微服务架构、异步通信等场景。它提供了强大的消息传递机制,用于解耦系统中的不同组件,提高系统的可伸缩性和灵活性。

目前常用的MQ
RabbitMQ: 开源消息队列。RabbitMQ 实现了高级消息队列协议(AMQP)。支持多种消息传递模式,包括点对点和发布/订阅。
Kafka: 分布式的流处理平台和消息系统。Kafka 设计用于处理大量的实时数据流,适用于日志聚合、事件处理等场景。
ActiveMQ: 开源的消息和集成模式服务器。它实现了Java Message Service(JMS)规范,支持多种消息传递模式和传输协议。
RocketMQ: 由阿里巴巴开发的分布式消息中间件,支持消息的有序传递和分布式事务。
Redis Pub/Sub: Redis作为一个内存数据库,也提供了发布/订阅功能,适用于轻量级的消息传递需求。

各自优缺点比较:

特点 / 系统 RabbitMQ Kafka ActiveMQ RocketMQ Redis Pub/Sub
通信模式 发布/订阅,点对点 发布/订阅,点对点 多种消息传递模式,JMS规范 发布/订阅,点对点 发布/订阅
设计目的 强调消息传递模式的灵活性 实时数据流处理和日志聚合 消息和集成模式服务器,JMS规范 有序传递和分布式事务 快速消息传递需求
持久性
事务支持
优点 多样的消息传递模式 高吞吐量、水平可扩展性 实现了JMS规范,多种模式和协议支持 高性能,有序传递和分布式事务支持 高性能、低延迟,简单易用
开源,强大的社区支持 持久性消息存储 事务、持久性消息支持 阿里巴巴生态系统广泛应用 内存数据库,快速消息发布和订阅
高可靠性、消息持久性 强大的社区支持和生态系统 社区活跃,广泛的应用 分布式系统中有序传递的需求
灵活性强 发布/订阅和消息队列两种通信模式 高可靠性,持久性消息存储
缺点 部署和管理相对复杂 学习曲线陡峭,部署和维护复杂 性能相对较低 社区相对较小,部署和管理复杂 不适用于大规模、高吞吐量系统
在某些极端条件下性能可能受限 相对大的资源消耗 部署和管理相对复杂 相对较大的学习曲线,管理复杂 没有消息持久性,消息可能丢失

总结

MQTT通常是一种用于实时通信的协议,物联网中的设备可以使用MQTT协议进行通信,通过发布消息和订阅消息的方式进行数据交换。而MQ系统则提供了更全面的消息处理服务,适用于分布式系统中各种异步通信需求。