关于RocketMQ的通俗理解

角色

  1. NameServer:这是一个无状态的服务注册与发现节点,主要负责提供服务注册、服务发现、路由管理等功能。NameServer集群中的每个节点都是平等的,它们之间不直接通信。其他组件如Broker、Producer、Consumer等需要定期向NameServer上报自己的状态,以便进行服务发现。
  2. Broker:这是RocketMQ的核心组件,负责接收来自Producer的消息、存储消息以及将消息转发给Consumer。Broker可以配置为Master或Slave模式来实现高可用性。Master可以处理读写请求,而Slave通常只处理读请求,用于数据备份。一个Master可以对应多个Slave,通过相同的BrokerName和不同的BrokerId(0表示Master,非0表示Slave)来标识它们之间的关系。
  3. Producer:即消息生产者,负责生成并发送消息到Broker。Producer在发送消息前需要先通过NameServer获取目标Topic的路由信息,然后与对应的Broker建立连接发送消息。
  4. Consumer:即消息消费者,负责从Broker拉取并消费消息。Consumer同样需要先通过NameServer获取Topic的路由信息,然后连接到相应的Broker上消费消息。根据消费方式的不同,Consumer可以分为点对点(队列模式)和发布/订阅(主题模式)两种类型。
通俗理解就是

NameServer:商场的导购台---- 导购台指引供货商/消费用户去查找指定商铺的位置

Broker:商铺---- 负责接收供货商的商品以及销售商品至消费客户

Producer:供货商---- 负责将东西送到商铺

Consumer:消费客户---- 负责去指定的商铺消费

为了让生产者和消费者能够将自己的东西/买到自己需要的指定物品

rocketMQ提供了两个属性

Topic和tag用于区分不同性质的信息

属性

1. Topic(主题)-- 必须指定
  • 定义:Topic 是消息的主题,用于对消息进行分类。每个消息都 必须 属于一个特定的 Topic
  • 作用:Topic 是消息分类的基本单位,生产者发送消息时需要指定一个 Topic,消费者订阅消息时也必须指定一个或多个 Topic。
  • 示例:假设有一个电商系统,可以有多个 Topic,例如 OrderTopic 用于处理订单消息,PaymentTopic 用于处理支付消息。
2. Tag(标签)-- 可选,不一定要指定
  • 定义:Tag 是对同一 Topic 下的消息进行进一步细分的标识。一个 Topic 可以有多个 Tag,每个消息可以携带一个或多个 Tag。
  • 作用:Tag 用于在同一个 Topic 内对消息进行更细粒度的分类,使得消费者可以根据具体的业务需求订阅感兴趣的消息子集。
  • 示例:在 OrderTopic 下,可以有多个 Tag,例如 NewOrder 表示新订单,CancelledOrder 表示已取消的订单。
通俗理解就是

Topic:店名--- 小米,华为,苹果等

Tag:商品种类--- 手机,手表,电脑等

运行原理

RocketMQ 运行原理概述

RocketMQ 是一个高性能、高可靠、高实时的消息中间件,主要用于在分布式系统中实现消息的异步传递。它的核心组件包括 NameServer、Broker、Producer 和 Consumer。下面是这些组件的工作原理和交互过程:

  1. NameServer(信息咨询台)
    • 作用:负责管理和调度消息的路由信息,提供服务注册与发现。
    • 类比:商场的信息咨询台,提供店铺位置和商品信息。
  1. Broker(店铺)
    • 作用:负责接收和存储消息,以及将消息分发给消费者。
    • 类比:商场内的店铺,接收和存储商品,供顾客购买。
  1. Producer(供货商)
    • 作用:生成和发送消息到 Broker。
    • 类比:供货商,将商品送到商场内的店铺。
  1. Consumer(顾客)
    • 作用:从 Broker 拉取消息并处理。
    • 类比:顾客,到店铺购买商品。
以商场为主题的运行原理
1. 初始化阶段
  • NameServer 启动:信息咨询台开始工作,等待店铺(Broker)和服务商(Producer)、顾客(Consumer)的注册和查询。
  • Broker 启动:店铺启动后,向信息咨询台(NameServer)注册自己的信息,包括店铺名称、位置等。
2. 消息生产阶段
  • Producer 启动:供货商启动后,向信息咨询台(NameServer)查询目标店铺(Broker)的位置信息。
  • 发送消息:供货商将商品(消息)送到指定的店铺(Broker)。例如,供货商将一批男装送到 服装店,并标明这批商品的标签为 男装
3. 消息存储阶段
  • Broker 存储消息:店铺(Broker)接收并存储供货商送来的商品(消息),并根据标签将商品分类存放。
4. 消息消费阶段
  • Consumer 启动:顾客启动后,向信息咨询台(NameServer)查询目标店铺(Broker)的位置信息。
  • 订阅消息:顾客订阅感兴趣的店铺和商品标签。例如,顾客 A 订阅 服装店 的 男装 标签。
  • 拉取消息:顾客从店铺(Broker)拉取并购买商品(消息)。例如,顾客 A 去 服装店 购买标签为 男装 的商品。
原理图展示

下面是 RocketMQ 运行原理的简化图,以商场为主题:

详细步骤
  1. NameServer 启动
    • 名称:信息咨询台
    • 功能:提供店铺位置和商品信息
  1. Broker 启动
    • 名称:店铺
    • 功能:接收和存储商品,供顾客购买
    • 操作:向信息咨询台注册自己的信息
  1. Producer 启动
    • 名称:供货商
    • 功能:将商品送到店铺
    • 操作:向信息咨询台查询目标店铺的位置信息,将商品送到指定的店铺
  1. 消息存储
    • 名称:店铺
    • 功能:接收并存储商品
    • 操作:根据标签将商品分类存放
  1. Consumer 启动
    • 名称:顾客
    • 功能:从店铺购买商品
    • 操作:向信息咨询台查询目标店铺的位置信息,订阅感兴趣的店铺和商品标签
  1. 消息消费
    • 名称:顾客
    • 功能:从店铺拉取并购买商品
    • 操作:从店铺拉取标签为男装的商品

故障场景分析

可能发生的场景及解决方案
场景一:商场关门了(Broker 停机)

问题描述:在消息传递过程中,如果 Broker 因为某种原因停机(如服务器宕机、网络故障等),会导致消息无法正常接收和发送。
解决方案

  1. 高可用性配置:设置 Master-Slave 模式,即一个 Master Broker 和多个 Slave Broker。Master 负责读写操作,Slave 负责备份数据。如果 Master 停机,Slave 可以接管,确保服务不中断。
  2. 自动恢复:Broker 停机后,一旦恢复,可以自动重新加入集群,继续处理未完成的消息。
  3. 消息持久化:将消息持久化到磁盘,确保即使 Broker 停机,消息也不会丢失。
场景二:供货商停止送货(Producer 停止发送消息)

问题描述:如果生产者因某种原因停止发送消息(如程序崩溃、网络故障等),会导致消息生产中断。
解决方案

  1. 重试机制:生产者可以在发送消息失败后进行重试,直到消息成功发送。
  2. 心跳检测:生产者定期向 NameServer 发送心跳,确保自身状态正常。
  3. 多实例部署:部署多个生产者实例,增加系统的冗余性和可靠性。
场景三:顾客离开商场(Consumer 停止消费消息)

问题描述:如果消费者因某种原因停止消费消息(如程序崩溃、网络故障等),会导致消息积压。
解决方案

  1. 重试机制:消费者在消费消息失败后可以进行重试,直到消息成功处理。
  2. 消息重投递:Broker 可以将未成功处理的消息重新投递给其他消费者。
  3. 多实例部署:部署多个消费者实例,增加系统的处理能力和可靠性。
  4. 消息确认机制:消费者在成功处理消息后发送确认回执,Broker 收到确认后才删除消息。如果未收到确认,Broker 会重新投递消息。
场景四:信息咨询台故障(NameServer 故障)

问题描述:如果 NameServer 因某种原因故障,会导致生产者和消费者无法获取路由信息,影响消息的发送和接收。
解决方案

  1. 集群部署:NameServer 采用集群部署,每个节点都是无状态的,可以互相备份。如果一个节点故障,其他节点可以继续提供服务。
  2. 自动切换:生产者和消费者在启动时会缓存路由信息,即使 NameServer 故障,也可以暂时继续工作,直到 NameServer 恢复。
图解

为了更直观地展示这些场景和解决方案,我们可以通过图解来表示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值