目录
RocketMQ的底层实现发送消息以及消费者感知消息进行消费的过程,涉及多个组件和复杂的交互流程。以下是对这一过程的详细解析:
一、发送消息的实现
- 消息生产者创建与配置:
- 生产者首先需要创建一个
Producer对象,并设置生产者组名。 - 指定NameServer的地址,以便生产者能够找到Broker。
- 生产者首先需要创建一个
- 消息创建:
- 生产者创建一个
Message对象,并设置Topic、Tag和消息体。
- 生产者创建一个
- 消息发送:
- RocketMQ提供了三种发送消息的方式:同步发送、异步发送和单向发送。
- 同步发送:发送消息后,生产者会阻塞等待Broker的响应,直到收到确认消息。这种方式可靠性高,适用于对发送成功可靠性要求严格的场景。
- 异步发送:发送消息后,生产者不会等待Broker的响应,而是直接执行后面的逻辑。Broker响应后,会通过回调函数通知生产者发送结果。这种方式提高了系统的吞吐量和性能。
- 单向发送:只负责发送消息,不关心发送结果。这种方式适用于对可靠性要求不高的场景,如日志发送。
- RocketMQ提供了三种发送消息的方式:同步发送、异步发送和单向发送。
- Broker处理:
- Broker接收到消息后,会将其写入内存缓存,并根据配置进行刷盘操作(同步刷盘或异步刷盘)。
- 刷盘操作完成后,Broker会向生产者发送响应,确认消息已成功写入磁盘。
二、消费者感知消息进行消费
- 消费者创建与配置:
- 消费者需要创建一个
Consumer对象,并设置消费者组名。 - 指定NameServer的地址,以便消费者能够找到Broker。
- 消费者需要创建一个
- 订阅主题:
- 消费者订阅需要消费的主题和Tag。
- 长轮询机制:
- RocketMQ的消费者客户端支持Push和Pull两种模式,但底层都是基于长轮询机制来实现消息拉取。
- 长轮询机制兼顾了拉和推消息的优势,消费者客户端向Broker发送拉消息请求,Broker在没有新消息时会暂停一段时间(如15秒),然后再返回给消费者客户端。如果期间有新消息到达,Broker会立即返回新消息。
- 消息拉取与消费:
- 消费者客户端通过长轮询机制不断从Broker拉取消息。
- 拉取到消息后,消费者客户端会对消息进行解码,并将消息分发给业务代码执行消费。
- 消费完成后,消费者客户端会更新消息的消费偏移量,以便下次拉取消息时从正确的位置开始。
- 负载均衡:
- RocketMQ支持多种负载均衡策略,以确保多个消费者能够均匀分担消息消费任务。
- 在集群消息模式下,消息偏移量存储在Broker,消费者客户端通过负载均衡策略分配消费队列,确保每个消费者处理的消息不同。
综上所述,RocketMQ通过复杂的组件交互和流程设计实现了高效、可靠的消息发送和消费。生产者发送消息后,Broker负责存储和确认消息;消费者则通过长轮询机制从Broker拉取消息并进行消费。同时,RocketMQ还支持多种负载均衡策略以确保消息消费的均匀性。
参考
RocketMQ入门教程(三):发送消息和消费消息_51CTO博客_rocketmq消息发送流程
RocketMQ:消息发送与消费_rocketmq实时消费-优快云博客
Roc

最低0.47元/天 解锁文章
172万+

被折叠的 条评论
为什么被折叠?



