RocketMQ介绍

RocketMQ · 官方网站 | RocketMQ

一.简介

RocketMQ 是一个分布式消息中间件,它包含四个主要组件:NameServer、Broker 、Producer和Consumer。

NameServer :(带头大哥)

  1. NameServer 类似于轻量级的服务注册与发现中心,扮演着路由管理的角色。

  2. 它负责维护 Broker 注册的 Topic 信息、队列信息以及 Broker 的地址列表等路由数据。

  3. 生产者和消费者都需要连接 NameServer 获取路由信息,从而得知应该向哪个 Broker 发送或订阅消息。

Broker :(小弟-干活的)

  1. Broker 是 RocketMQ 的核心服务,它负责接收、存储和转发消息。

  2. Broker 分为主从节点,支持多副本机制,提供高可用和高并发的消息处理能力。

  3. Broker 会定时向 NameServer 注册自己的路由信息,并处理来自生产者的消息发布请求以及来自消费者的订阅和消息拉取请求。

Producer:

  1. Producer 是消息的生产者,负责创建并发送消息到 Broker。

  2. Producer 会首先从 NameServer 获取 Topic 的路由信息,然后选择合适的 Broker 进行消息投递。

  3. 支持分布式集群部署和负载均衡,能够进行消息的批量发送、顺序发送、延时发送等多种消息发送模式。

Consumer:

  1. Consumer 是消息的消费者,它订阅特定的 Topic 并从 Broker 拉取消息进行处理。

  2. Consumer 也会连接 NameServer 获取 Topic 的路由信息,进而找到并连接相关的 Broker 以拉取消息。

  3. Consumer 支持集群消费模式,包括广播消费、集群消费、有序消息消费等多种消费模式。

二.在 RocketMQ 中,Topic、Queue和Group 是三个非常重要的概念。

1. Topic(主题)

Topic 是消息发布和订阅的逻辑标识符(抽象-消息的归类),所有消息都必须发布到特定的 Topic 中,然后才能被订阅者消费。

  • 生产者(Producer)发布消息时,会选择一个特定的 Topic,所有的消息都会按照这个 Topic 进入对应的队列。

  • 消费者(Consumer)订阅的是一个或多个 Topic,表示他们希望消费这个 Topic 下的所有消息。

  • 多个生产者可以向同一个 Topic 发布消息,同样,多个消费者也可以订阅同一个 Topic。

2.Queue(消息队列)

一开始的时候一个Topic就对应一个queue,多好,一个是名字、一个是实现。可是用着用着就悲催了,为啥?消息操作太多了,全都怼在一个小队列上。为了提高效率,咋整??RocketMQ是这样做的,一个Topic绑定的是一组queue,这样每个queue分摊部分压力,性能就上去了。

  1. Queue 是 Topic 下物理层面的进一步划分,代表了消息的实际存储位置和消费顺序。

  2. 在 RocketMQ 中,每个 Topic 会被拆分成多个Queue,这些 Queue 是分布式的,可以存在于不同的 Broker 节点上。

  3. 生产者在发布消息时,消息会被均匀地分布到 Topic 关联的所有 Queue 上,这样可以实现水平扩展和负载均衡。

  4. 消费者在消费消息时,可以选择从 Topic 下的一个或多个Queue 中消费消息,以此实现并行消费和分布式处理,提高消息消费的效率和系统的吞吐量。

简而言之,Topic 是逻辑上的抽象,用于标识一类消息,而 Queue 是 Topic 在物理层面的具体实现,用于承载实际的消息,并决定了消息的存储和消费顺序。两者结合起来,使得RocketMQ能够高效地进行消息的发布和订阅。

3. Group(组)

Group 是生产者和消费者的一个逻辑标识符,每个生产者和消费者都必须属于某一个 Group。RocketMQ 使用 Group 来区分不同的消费者和生产者,以便进行负载均衡、容错和协作。同一 Group 中的消费者将共同 消费同一个 Topic 中的消息。在 RocketMQ 中,一个组可以有多个消费者实例,每个实例将独立消费一部分消息。这样设计的好处在于可以通过增加实例数来扩容和提高消费速度。

每个组都会拿到topic的所有消息,同一组内如果有多个消费者实例,那么它们平均拿取消息。

相关推荐
千里达景区票务系统2 天前
消息队列选型对比:RabbitMQ vs RocketMQ vs Kafka
kafka·消息队列·rabbitmq·rocketmq
阿里云云原生6 天前
阿里云云原生四项 AI 应用工程化实荣获“鼎新杯”优秀案例
rocketmq
阿里云云原生6 天前
Qoder Cloud Agents 手脑分离实践:RocketMQ LiteTopic 如何支撑规模化长程 Agent 任务
rocketmq
阳光不锈@7 天前
三大主流消息队列架构设计思想剖析:从 RabbitMQ 到 RocketMQ 的改造实践
kafka·rabbitmq·rocketmq·rabbit改造rocket·去除rabbitmq·rabbitmq改造
薛之谦_12 天前
Java 整合 RocketMQ 实战:从入门到复杂场景落地
java·rocketmq·java-rocketmq
jyOverQ12 天前
从零开始学 RocketMQ(四):集群部署、消息存储与高可用【保姆级教程】
java·rocketmq·java-rocketmq
Msshu12316 天前
PD快充诱骗取电芯片工作原理,XSP17诱骗取电5V9V12V15V20V功能测试
spring boot·spring cloud·sentinel·java-rocketmq·java-zookeeper·java-consul·java-activemq
Thomas.Sir18 天前
第31课:微服务消息驱动(RabbitMQ/RocketMQ)适配与解耦实战
微服务·rabbitmq·rocketmq
Knight_AL18 天前
本地服务连接 SaaS 测试环境实践:Docker 部署 Redis 与 RocketMQ 完成接口联调
redis·docker·rocketmq
jyOverQ18 天前
从零开始学 RocketMQ(一):基础概念、环境搭建与简单消息收发【保姆级教程】
java·rocketmq·java-rocketmq