概述
Consumer 在中间件中是一个非常重要的角色。因为,我们平时开发过程中,出问题的可能更多会是在 Consumer 侧。
RocketMQ Consumer 侧提供了以下功能供我们开发时自主选择
-
Rebalance(队列重负载) 策略选择 -
广播消费 OR 集群消费. 开发过程中我们一般使用集群消费,后续的讲解也只会讲解集群消费
-
tag 消息过滤 OR SQL92 消息过滤. 开发过程中我们一般使用 tag 进行过滤,后续的讲解也只会讲解 tag 消息过滤
编写消息中间件 Consumer 侧问题
在自己编写消息中间件 Consumer 侧时,会遇到什么问题呢?
-
首先需要思考的是
Consumer如何拿到消息?是通过 push? 还是 pull? 绝大多数的 MQ 其实都是Consumer侧自己 pull 消息。RocketMQ也是基于pull实现的,虽然有提供 通过push的方式获取消息,但实际上push就是基于pull封装的。 -
知道如何拿消息了,接着需要思考 1个消费组中 有多个消费者, 需要提供什么策略, 让多个消费者拉取指定队列的消息 -- RocketMQ 的 Rebalance 过程
-
多个消费组可以消费同一个
topic,但是某个消费组可能不想消费具有某个特征的消息。因此还要思考如何通过消息过滤功能 -- RocketMQ 的消息过滤 -
消息消费完毕了, 还得考虑,如何将消费进度同步给
Broker-- RocketMQ 的消费进度持久化
以上就是 Consumer 侧相对重要的概念,在后续的文章中,会重点说明以上问题,RocketMQ 是如何设计。
Consumer 侧整体流程概述
该图只是概览,后续的文章,会拆解讲解图中的流程。