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的所有消息,同一组内如果有多个消费者实例,那么它们平均拿取消息。

相关推荐
阿昌喜欢吃黄桃4 天前
RocketMq事务消息原理
java·中间件·消息队列·rocketmq·mq
huisheng_qaq7 天前
【项目篇-01】Vmware虚拟机和环境安装配置
redis·mysql·canal·rocketmq·es·vaware虚拟机
码农飞哥8 天前
RocketMQ消费接口设计实战:为什么HTTP回调接口必须吞掉所有异常,始终返回成功?
网络协议·http·中间件·消息队列·rocketmq
阿维的博客日记8 天前
细说RocketMQ双网卡问题
rocketmq
北城以北88888 天前
RocketMQ简介
java·spring boot·后端·rocketmq
IT界的老黄牛8 天前
RocketMQ 4.x 任意秒数延迟消息工程实战:MQ 粗延迟 + Redis 补精度 + MDC 链路透传
redis·rocketmq·事务消息·延迟消息
至此流年莫相忘9 天前
Windows 环境下 RocketMQ 安装与 NSSM 后台服务化部署指南
windows·rocketmq
小马爱打代码9 天前
Java开发:Spring Cloud Alibaba微服务之消息队列(RocketMQ、Kafka、RabbitMQ)
java·java-rocketmq·java-rabbitmq
折哥的程序人生 · 物流技术专研9 天前
《Java 100 天进阶之路》第95篇:消息队列基础(RocketMQ/Kafka)(2026版)
java·面试·kafka·rocketmq·java-rocketmq·求职招聘
景川呀10 天前
RocketMq知识点
java·rocketmq·java-rocketmq