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

发布时间:2025-05-17 12:11:35 作者:益华网络 来源:undefined 浏览量(1) 点赞(1)
摘要:来源:mikechen的互联网架构 消息队列MQ是互联网架构的基石,大量应用于类似:阿里双11等并发场景,下面我就全面来详解MQ消息队列 消息队列MQ 消息队列(Message Queue,简称MQ)是一种用于在软件系统之间传递消息的通信方

来源:mikechen的互联网架构

消息队列MQ是互联网架构的基石,大量应用于类似:阿里双11等并发场景,下面我就全面来详解MQ消息队列

消息队列MQ

消息队列(Message Queue,简称MQ)是一种用于在软件系统之间传递消息的通信方式。

如下图所示:

消息通常包含了:要传递的信息,可以是文本、二进制数据、JSON、XML等格式。

可以是任何形式的信息,例如:订单信息、日志记录、事件等,都可以进行传输。

消息队列MQ如今在互联网的应用非常广泛,下面我会全面来详解消息队列MQ@mikechen

消息队列MQ架构

一.整体架构

消息队列MQ的整体架构,如下图所示:

主要会包含:生产者Producer、Broker、消费Consumer。

1.生产者Producer

生产者:是系统中负责创建,并发送消息到消息队列的组件。

生产者的主要责任包括:

创建消息:构造消息体并添加必要的元数据,例如:消息标识、时间戳等。

将消息发送到消息队列:将消息发送到指定的队列或主题,将消息传递给中间件。

2.消息体

消息体是消息中的实际数据,它包含了:需要在生产者和消费者之间传递的信息。

消息体的内容可以是:文本、JSON、二进制数据等,具体格式取决于应用的需求。

3.Broker

Broker中间件:负责接收、存储和传递消息。

如下图所示:

Broker,充当了生产者和消费者之间的中介。

主要职责包括:

1)接收消息

从生产者接收消息,并将其存储在消息队列中。

2)管理消息

维护消息队列的元数据,确保消息按照规定的顺序传递。

3)将消息传递给消费者

将消息传递给,订阅了相关队列或主题的消费者

总之,Broker是消息队列(Message Queue)中的一个重要组件,它充当了消息的中间人,负责协调和管理消息的传递。

4.消费者Consumer

消费者(Consumer)是消息队列系统中的一个重要组件,其主要责任是订阅消息队列中的消息,并进行处理。

以下是一些常见的消息队列中的消费方式:

1.Push模式

在Push模式中,消息队列主动将消息推送给消费者。

一旦消息队列接收到消息,它立即将消息推送给已经订阅了该队列或主题的消费者, 这样的方式使得消费者能够即时地获取消息。

2.Pull模式

在Pull模式中,消费者主动从消息队列中拉取消息。,消费者根据需要向消息队列请求消息,然后进行处理。

3.批量拉取

一些消息队列系统支持批量拉取消息,即消费者可以一次性获取多个消息。

4.定时拉取

消费者可以定时地按照一定的频率拉取消息,而不是实时处理,这种方式适用于一些场景,例如:需要按照固定间隔处理消息的情况。

消息队列MQ类型

消息队列类型,主要会包含:点对点模型和订阅-发布模型。

1.点对点模型

点对点模型,是一对一关系,如下图所示:

在点对点模型中,一条消息只会被一个消费者消费, 即使有多个消费者订阅了同一个队列,每条消息也只会被其中一个消费者接收。

适用于任务分发模式,每个任务只被一个消费者执行的场景,这种模型常见于一些任务分配、请求-响应等场景。

2.订阅-发布模型

订阅-发布模型,全称是Publish-Subscribe Model,是消息队列中一种常见的消息传递模型,也被称为发布订阅模型。

如下图所示:

特点:

一对多关系: 每条消息可以被多个消费者接收。

主题(Topic): 消息被发布到一个主题,而订阅者可以选择订阅特定的主题。

发布者(Publisher): 生产者或发布者,负责将消息发布到一个或多个主题。

订阅者(Subscriber): 消费者或订阅者,可以选择订阅一个或多个主题,以接收发布到这些主题的消息。

流程:

发布消息: 发布者将消息发布到一个特定的主题,如"新闻"或"实时通知"。

订阅主题: 订阅者,选择订阅感兴趣的主题,比如:订阅"新闻"主题。

消息传递: 当发布者发布与订阅者已订阅的主题相关的消息时,订阅者将接收到这些消息。

应用场景:

实时广播: 适用于需要将消息广播给多个消费者的场景,例如:实时通知、广播消息等。

事件驱动: 用于实现事件驱动架构。

分布式系统集成: 在分布式系统中,发布-订阅模型可以用于实现组件之间的松耦合通信,提高系统的灵活性和可扩展性。

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

点对点模型适用于一对一的场景,关注直接连接的点对点关系,而发布订阅模型适用于一对多的场景。

点对点模型

着重于消息的直接传递,消息的生产者和消费者之间直接连接。

这种模型通常强调点对点的关系,消息的生产者和消费者之间是一对一的。

发布订阅模型

着重于消息的广播和分发,消息的发布者和订阅者之间通过主题进行间接连接。

这种模型通常强调一对多的关系,一个消息可以被多个订阅者接收。

5大常用消息队列MQ

1.ActiveMQ

特点:

支持JMS规范,实现了Java语言的消息中间件。

提供点对点(P2P)和发布-订阅(Pub/Sub)两种消息传递模型。

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

多语言支持,适用于Java、C++, .NET等。

应用:

适用于Java环境下的分布式系统,企业级应用中的消息传递和异步通信。

性能:

性能在万级/秒。

2.RabbitMQ

特点:

实现AMQP(Advanced Message Queuing Protocol)标准。

提供灵活的消息路由和交换机模型,支持多种消息模式。

具有高可用性和可扩展性,支持集群配置。

提供事务和持久性,支持消息确认机制。

架构:

RabbitMQ采用基于代理的架构,包括Exchange(交换机)、Queue(队列)、Binding(绑定)等核心组件。

如下图所示:

应用:

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

3.Kafka

特点:

高吞吐量,适用于大规模数据流处理。

持久性存储,支持消息的持久化。

分布式设计,可扩展性强,支持水平扩展。

提供多分区和多副本的特性。

架构:

Kafka采用分布式发布-订阅模型,包括Producer(生产者)、Broker(代理服务器)、Consumer(消费者)等组件。

如下图所示:

应用:

在大数据领域和实时数据处理中得到广泛应用,处理大规模数据流的场景。

性能:

具有极高的吞吐量,能够每秒处理数百万条消息,适用于高频率的数据流处理。

4.RocketMQ

特点:

阿里巴巴开发,支持分布式、高可用性和可伸缩性。

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

高度可定制化,支持分布式事务。

架构:

RocketMQ包括Namesrv(名称服务)、Broker(代理服务器)、Producer(生产者)、Consumer(消费者)等组件。

如下图所示:

性能:

能够处理十万级别的消息传递,支持大规模分布式部署。

 5.Pulsar

特点:

云原生设计,支持分布式、多租户和可伸缩。

提供水平扩展,支持多数据中心部署。

支持多种消息传递模型和协议。

提供强大的流式处理和事件驱动支持。

架构:

Pulsar的架构包括Broker(代理服务器)、ZooKeeper等组件。

应用:

适用于新一代的云原生分布式消息流平台,特别适用于处理大规模数据流的场景。

MQ消息队列应用

1.解耦性

发送积分、发短信等任务,可以通过消息队列实现解耦,可以极大提升性能。

2.异步通信

在需要后台处理的任务中,发送方可以将任务信息发送到队列,然后继续执行其他操作,而不必等待任务的实时处理。

3.日志

Kafka等消息队列系统常被用于日志收集,实现大规模、实时的日志处理和分析。

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

4.削峰

消息队列可以平滑处理流量峰值,防止系统过载。

在大型购物活动,如阿里双11期间,消息队列用于平滑处理大量的交易请求,确保系统的可伸缩性和稳定性。

二维码

扫一扫,关注我们

声明:本文由【益华网络】编辑上传发布,转载此文章须经作者同意,并请附上出处【益华网络】及本页链接。如内容、图片有任何版权问题,请联系我们进行处理。

感兴趣吗?

欢迎联系我们,我们愿意为您解答任何有关网站疑难问题!

您身边的【网站建设专家】

搜索千万次不如咨询1次

主营项目:网站建设,手机网站,响应式网站,SEO优化,小程序开发,公众号系统,软件开发等

立即咨询 15368564009
在线客服
嘿,我来帮您!