RocketMQ的底层是怎么实现发送消息,消费者感知消息进行消费

目录

一、发送消息的实现

二、消费者感知消息进行消费

1. 消息发送流程(Producer -> Broker)

1.1 Producer 发送消息

1.2 Broker 接收消息

2. 消息消费流程(Consumer <- Broker)

2.1 Consumer 启动

2.2 Broker 处理拉取请求

2.3 Consumer 消费消息

3. 消费者感知消息的机制

3.1 长轮询(Long Polling)

3.2 消息拉取负载均衡

3.3 消费位点管理

4. 核心组件的作用

4.1 NameServer

4.2 Broker

4.3 CommitLog

4.4 ConsumerQueue

4.5 Netty

5. 总结


RocketMQ的底层实现发送消息以及消费者感知消息进行消费的过程,涉及多个组件和复杂的交互流程。以下是对这一过程的详细解析:

一、发送消息的实现

  1. 消息生产者创建与配置
    • 生产者首先需要创建一个Producer对象,并设置生产者组名。
    • 指定NameServer的地址,以便生产者能够找到Broker。
  2. 消息创建
    • 生产者创建一个Message对象,并设置Topic、Tag和消息体。
  3. 消息发送
    • RocketMQ提供了三种发送消息的方式:同步发送、异步发送和单向发送。
      • 同步发送:发送消息后,生产者会阻塞等待Broker的响应,直到收到确认消息。这种方式可靠性高,适用于对发送成功可靠性要求严格的场景。
      • 异步发送:发送消息后,生产者不会等待Broker的响应,而是直接执行后面的逻辑。Broker响应后,会通过回调函数通知生产者发送结果。这种方式提高了系统的吞吐量和性能。
      • 单向发送:只负责发送消息,不关心发送结果。这种方式适用于对可靠性要求不高的场景,如日志发送。
  4. Broker处理
    • Broker接收到消息后,会将其写入内存缓存,并根据配置进行刷盘操作(同步刷盘或异步刷盘)。
    • 刷盘操作完成后,Broker会向生产者发送响应,确认消息已成功写入磁盘。

二、消费者感知消息进行消费

  1. 消费者创建与配置
    • 消费者需要创建一个Consumer对象,并设置消费者组名。
    • 指定NameServer的地址,以便消费者能够找到Broker。
  2. 订阅主题
    • 消费者订阅需要消费的主题和Tag。
  3. 长轮询机制
    • RocketMQ的消费者客户端支持Push和Pull两种模式,但底层都是基于长轮询机制来实现消息拉取。
    • 长轮询机制兼顾了拉和推消息的优势,消费者客户端向Broker发送拉消息请求,Broker在没有新消息时会暂停一段时间(如15秒),然后再返回给消费者客户端。如果期间有新消息到达,Broker会立即返回新消息。
  4. 消息拉取与消费
    • 消费者客户端通过长轮询机制不断从Broker拉取消息。
    • 拉取到消息后,消费者客户端会对消息进行解码,并将消息分发给业务代码执行消费。
    • 消费完成后,消费者客户端会更新消息的消费偏移量,以便下次拉取消息时从正确的位置开始。
  5. 负载均衡
    • RocketMQ支持多种负载均衡策略,以确保多个消费者能够均匀分担消息消费任务。
    • 在集群消息模式下,消息偏移量存储在Broker,消费者客户端通过负载均衡策略分配消费队列,确保每个消费者处理的消息不同。

综上所述,RocketMQ通过复杂的组件交互和流程设计实现了高效、可靠的消息发送和消费。生产者发送消息后,Broker负责存储和确认消息;消费者则通过长轮询机制从Broker拉取消息并进行消费。同时,RocketMQ还支持多种负载均衡策略以确保消息消费的均匀性。

参考

RocketMQ入门教程(三):发送消息和消费消息_51CTO博客_rocketmq消息发送流程

RocketMQ消费者消费消息核心原理(含长轮询机制)

RocketMQ:消息发送与消费_rocketmq实时消费-优快云博客


Roc

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值