来源:mikechen的消息详解互联网架构 消息队列MQ是互联网架构的基石,大量应用于类似:阿里双11等并发场景,队列下面我就全面来详解MQ消息队列 消息队列(Message Queue,最全总结简称MQ)是图文一种用于在软件系统之间传递消息的通信方式。 如下图所示: 消息通常包含了:要传递的信息,可以是队列文本、二进制数据、最全总结JSON、图文XML等格式。消息详解 可以是队列任何形式的信息,例如:订单信息、最全总结日志记录、图文事件等,消息详解都可以进行传输。队列 消息队列MQ如今在互联网的最全总结应用非常广泛,下面我会全面来详解消息队列MQ@mikechen 一.整体架构 消息队列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.点对点和发布订阅的区别 点对点模型适用于一对一的场景,关注直接连接的点对点关系,而发布订阅模型适用于一对多的场景。 点对点模型 着重于消息的直接传递,消息的生产者和消费者之间直接连接。 这种模型通常强调点对点的关系,消息的生产者和消费者之间是一对一的。 发布订阅模型 着重于消息的广播和分发,消息的发布者和订阅者之间通过主题进行间接连接。 这种模型通常强调一对多的关系,一个消息可以被多个订阅者接收。 1.ActiveMQ 特点: 支持yhS规范,实现了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等组件。 应用: 适用于新一代的云原生分布式消息流平台,特别适用于处理大规模数据流的场景。 1.解耦性 发送积分、发短信等任务,可以通过消息队列实现解耦,可以极大提升性能。 2.异步通信 在需要后台处理的任务中,发送方可以将任务信息发送到队列,然后继续执行其他操作,而不必等待任务的实时处理。 3.日志 Kafka等消息队列系统常被用于日志收集,实现大规模、实时的日志处理和分析。 日志场景,包含:日志的集中存储、分析和监控等等,Kafka就是典型的使用者。 4.削峰 消息队列可以平滑处理流量峰值,防止系统过载。 在大型购物活动,如阿里双11期间,消息队列用于平滑处理大量的交易请求,确保系统的可伸缩性和稳定性。消息队列MQ
消息队列MQ架构
5大常用消息队列MQ
MQ消息队列应用