消息队列最全详解(万字图文总结)

消息队列最全详解(万字图文总结)

什么是MQ消息队列?

MQ,全称是Message Queue,简称就是MQ消息队列。

MQ消息队列,是一种在分布式系统中用于消息传递的通信方式。

如下图所示:

消息队列最全详解(万字图文总结)

MQ中的消息是数据单元,可以包含任何形式的信息,比如:文本、二进制数据等。

MQ消息队列,允许不同的应用程序或组件,在系统之间异步地传递消息,提供了一种解耦的方式。

MQ消息队列,如今在互联网的应用非常广泛,也是很多大厂最重要的中间件,下面我会全面来详解MQ消息队列@mikechen

 

 

MQ消息队列设计

一.整体架构

MQ(消息队列)的整体架构通常包括以下主要组件:

分别是:生产者(Producer)、消息队列(Message Queue)、消费者(Consumer)。

如下图所示:

消息队列最全详解(万字图文总结)

 

2.生产者

角色:

  • 生产者是:消息队列系统中的消息创建者和发送者。
  • 它负责:生成消息并将其发送到消息队列中。

功能:

  • 创建消息:生产者负责创建包含所需信息的消息。
  • 发送消息:将创建的消息发送到消息队列中,选择合适的队列或主题。

特点:

  • 生产者和消息队列之间是松散耦合的关系,生产者无需关心消息的最终目的地,只需将消息发送到消息队列即可。

 

3.消息队列(Message Queue)

消息队列:是消息的中转站,负责存储、管理和传递消息。

消息队列,主要会涉及到:

  • 存储消息:接收来自生产者的消息并存储在队列中。
  • 管理消息:管理消息的传递、顺序、持久性等特性。
  • 传递消息:将消息传递给已订阅或已注册的消费者。

 

4.消费者(Consumer)

消费者:是消息队列系统中的消息接收者和处理者。

主要会涉及到:

  • 订阅消息:选择感兴趣的队列或主题进行订阅。
  • 接收消息:从消息队列中接收消息,通常按照先进先出(FIFO)的原则。
  • 处理消息:对接收到的消息进行处理,执行相应的业务逻辑。

 

二.消息队列类型

1)点对点模型

在点对点模型中,消息的发送者(生产者),将消息发送到一个特定的队列。

如下图所示:

消息队列最全详解(万字图文总结)

应用场景:

  • 任务分发:适用于任务分发模式,每个任务只被一个消费者执行。
  • 点对点通信:适用于直接的点对点通信场景,例如请求和响应。

 

2)订阅-发布模型(Publish-Subscribe Model)

在发布/订阅模型中,消息的发送者(生产者)将消息发布到一个主题(Topic)。

如下图所示:

消息队列最全详解(万字图文总结)

订阅发布模型,主要包含如下2大特点:

  • 一对多关系:每条消息可以被多个消费者接收。
  • 主题:消息被发布到一个主题,多个消费者可以订阅该主题。

应用场景:

  • 实时广播:适用于需要将消息广播给多个消费者的场景,例如实时通知。
  • 事件驱动:用于实现事件驱动架构,各个组件可以通过订阅感兴趣的主题来获取相关事件。

 

3)点对点和发布订阅的区别

点对点:

  • 一对一关系,每条消息只有一个消费者能够接收。
  • 消息的接收,导致该消息从队列中被移除。
  • 适用于直接的、一对一的通信场景。

发布/订阅:

  • 一对多关系,每条消息可以被多个消费者接收。
  • 消息的接收并不导致消息从主题中被移除,允许多个消费者独立接收相同的消息。
  • 适用于广播和一对多的通信场景,比如:实时通知、事件驱动等场景。

 

三.消息传输协议(Message Transport Protocol)

消息传输协议,是用于在不同系统或设备之间进行消息传递的规范和约定。

这些协议定义了:消息的格式、传递方式、数据结构和交互规则,以确保消息的可靠传递。

常用的协议,包含:AMQP、MQTT、STOMP等。

1.AMOP

AMQP,全称是Advanced Message Queuing Protocol,是一种开放的、标准化的消息传递协议。

AMQP支持点对点(Queue)和发布/订阅(Exchange)两种主要的消息模型。

AMQP,广泛应用于企业级系统,如RabbitMQ作为AMQP协议的实现。

AMOP它允许应用程序通过消息队列进行异步通信,还广泛应用于分布式系统、企业集成、微服务架构等场景。

 

2.MQTT

MQTT,全称是Message Queuing Telemetry Transport,是一种轻量级、开放的消息传输协议。

主要应用于物联网领域,用于连接和通信各种设备。

 

3.STOMP 

STOMP,全称是Simple Text Oriented Messaging Protocol。

STOMP,设计为一种简单的、文本导向的消息传递协议,易于实现和理解。

STOMP通常用于简单的消息传递场景,不如AMQP和MQTT功能丰富,但在一些特定应用中能够提供足够的灵活性。

 

4.JMS

JMS,全称是Java Message Service,是Java平台上用于实现消息驱动规范。

JMS定义了一套用于创建、发送、接收和处理消息的标准接口,使得Java应用程序能够与不同消息中间件进行交互。

 

MQ消息队列有哪些

1.ActiveMQ
消息队列最全详解(万字图文总结)

ActiveMQ:是一个基于Java的开源消息中间件。

实现了JMS(Java Message Service)规范。

支持多种消息传递模型,包括点对点和发布/订阅。

提供了高级特性,如事务、持久性、消息过滤等。

ActiveMQ是Apache出品,是消息队列的祖师爷,性能在万级/秒。

 

2.RabbitMQ
消息队列最全详解(万字图文总结)

RabbitMQ是一个开源的消息队列系统,实现了AMQP标准。

RabbitMQ支持灵活的消息路由和交换机模型,还可靠性强,支持事务和持久性。

RabbitMQ,适用于各种应用场景,包括微服务通信、任务队列、实时通信等。

消息队列最全详解(万字图文总结)

3.Kafka
消息队列最全详解(万字图文总结)

Kafka是由LinkedIn开发,并作为开源项目贡献给Apache软件基金会。

Kafka设计用于处理大量数据,并能够实现每秒数百万条消息的高吞吐量。

这是Kafka与别的消息队列,有很大不一样的地方,就是能处理大数据,性能在百万级/秒。

消息队列最全详解(万字图文总结)

Kafka在大数据领域和实时数据处理中得到了广泛应用,其设计和特性使其适用于处理大规模数据流的各种场景。

 

4.RocketMQ
消息队列最全详解(万字图文总结)

RocketMQ,是阿里巴巴开发,并捐赠给 Apache 软件基金会。

支持分布式、高可用性和可伸缩性。

提供顺序消息、事务消息等高级特性。

RocketMQ参考Kafka而设计的,性能在十万级/秒。

消息队列最全详解(万字图文总结)

RocketMQ,适用于分布式系统、电商平台、金融领域等。

 5.Pulsar

消息队列最全详解(万字图文总结)

Pulsar,是下一代云原生分布式消息流平台。

消息队列最全详解(万字图文总结)

支持:分布式、多租户、可伸缩,支持水平扩展。

适用于:高吞吐量、低延迟、可伸缩性强的场景。

 

MQ消息队列应用

MQ消息队列应用场景,如下图所示:

消息队列最全详解(万字图文总结)

1.解耦性

发送方通过将消息发送到消息队列,不需要知道接收方的具体信息,实现了解耦,这是第一大应用场景。

比如:发送积分、发短息等等,都可以采用。

2.异步通信

消息队列,支持异步通信模式,发送方将消息发送到队列后,即可继续执行其他任务,而无需等待即时响应。

3.日志

日志场景,包含:日志的集中存储、分析和监控等等,Kafka就是典型的使用者。

4.削峰

平滑处理流量峰值,防止系统过载,提高系统的可伸缩性和稳定性,比如:阿里双11,就是典型的场景。

 

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧