RocketMQ源码分析之消息消费概述

本文分析RocketMQ消息消费方式,包括拉取和推送模式,集群和广播消费模式,以及消费起点选择。详细探讨DefaultMQPushConsumerImpl的初始化过程,包括配置检查、订阅信息处理、消费进度存储等关键步骤,解析MQClientInstance的角色和RebalanceImpl在负载均衡中的作用。
摘要由CSDN通过智能技术生成

1、消息消费概述

  • 消息消费方式
    拉取、推送。
  • 消费者组与消费模式
    多个消费者组成一个消费组,两种模式:集群(消息被其中任何一个消息者消费)、广播模式(全部消费者消费)。
  • ConsumeFromWhere consumeFromWhere
    从何处开始消费,可选值:
    1)CONSUME_FROM_LAST_OFFSET:上一次消费偏移量
    2)CONSUME_FROM_FIRST_OFFSET:从头开始
    3)CONSUME_FROM_TIMESTAMP:从某个时间点开始
  • 消费进度存储
    其实现类为:OffsetStore offsetStore。消费者需要记录消息消费的进度:
    1)广播模式:广播模式由于每个消费者都需要消费消息,故消息的进度(最后消费的偏移量可以保存在本地)。
    2)集群模式:由于集群中的消费者只要一个消费消息即可,故消息的消费进度,需要保存在集中点,故 RocketMQ存储在Broker所在的服务器。

2、消息消费实现

首先看一下消费 Demo。

使用推送模式,设置消费者所属组,订阅主题、定义消息消费回调接口,推送消息后消费方具体业务处理,并返回CONSUME_SUCCESS表示消费成功。

消息消费者具体实现类:org.apache.rocketmq.client.impl.consumer.DefaultMQPushConsumerImpl。

2.1 DefaultMQPushConsumerImpl

2.1.1 消费端初始化(构造方法)

然后开始重点从 star t方法深入研究 DefaultMQPushConsumerImpl 的内部机制。

public synchronized void start() throws MQClientException {
        switch (this.serviceState) {  
            case CREATE_JUST:
                log.info("the consumer [{}] start beginning. messageModel={}, isUnitMode={}", this.defaultMQPushConsumer.getConsumerGroup(),
                    this.defaultMQPushConsumer.getMessageModel(), this.defaultMQPushConsumer.isUnitMode());
                this.serviceState = ServiceState.START_FAILED;     // @1

                this.checkConfig();                                                 //@2

                this.copySubscription();                                         //@3

                if (this.defaultMQPushConsumer.getMessageModel() == MessageModel.CLUSTERING) {    // @4
                    this.defaultMQPushConsumer.changeInstanceNameToPID();
                }

                this.mQClientFactory = MQClientManager.getInstance().getAndCreateMQClientInstance(this.defaultMQPushConsumer, this.rpcHook);

                this.rebalanceImpl.setConsumerGroup(this.defaultMQPushConsumer.getConsumerGroup());    // @
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值