RocketMQ Consumer 概述

293 阅读2分钟

概述

Consumer 在中间件中是一个非常重要的角色。因为,我们平时开发过程中,出问题的可能更多会是在 Consumer 侧。

RocketMQ Consumer 侧提供了以下功能供我们开发时自主选择

  1. Rebalance(队列重负载) 策略选择

  2. 广播消费 OR 集群消费. 开发过程中我们一般使用集群消费,后续的讲解也只会讲解集群消费

  3. tag 消息过滤 OR SQL92 消息过滤. 开发过程中我们一般使用 tag 进行过滤,后续的讲解也只会讲解 tag 消息过滤

编写消息中间件 Consumer 侧问题

在自己编写消息中间件 Consumer 侧时,会遇到什么问题呢?

  1. 首先需要思考的是 Consumer 如何拿到消息?是通过 push? 还是 pull? 绝大多数的 MQ 其实都是 Consumer 侧自己 pull 消息。RocketMQ 也是基于 pull 实现的,虽然有提供 通过 push 的方式获取消息,但实际上 push 就是基于 pull 封装的。

  2. 知道如何拿消息了,接着需要思考 1个消费组中 有多个消费者, 需要提供什么策略, 让多个消费者拉取指定队列的消息 -- RocketMQ 的 Rebalance 过程

  3. 多个消费组可以消费同一个 topic,但是某个消费组可能不想消费具有某个特征的消息。因此还要思考如何通过消息过滤功能 -- RocketMQ 的消息过滤

  4. 消息消费完毕了, 还得考虑,如何将消费进度同步给 Broker -- RocketMQ 的消费进度持久化

以上就是 Consumer 侧相对重要的概念,在后续的文章中,会重点说明以上问题,RocketMQ 是如何设计。

Consumer 侧整体流程概述

该图只是概览,后续的文章,会拆解讲解图中的流程。

image.png