RocketMQ源码解析之Consumer停止

本文深入分析RocketMQ中Consumer的停止流程,包括push模式下Consumer如何停止消费、注销及客户端停止过程,揭示与Producer流程的复用部分。

阅读须知

  • 文章中使用/* */注释的方法会做深入分析

正文

Consumer 的停止流程和 Producer 的停止流程有很多复用的部分,前面我们已经分析过 Producer 的停止流程,复用部分这里不再重复。Consumer 的停止同样可以依托于 Spring bean 的生命周期,在 Spring bean 销毁时调用 DefaultMQPushConsumer 的 shutdown 方法:

public void shutdown() {
    /* 停止 */
    this.defaultMQPushConsumerImpl.shutdown();
    if (null != traceDispatcher) {
        traceDispatcher.shutdown();
    }
}

DefaultMQPushConsumerImpl:

public synchronized void shutdown() {
    switch (this.serviceState) {
        case CREATE_JUST:
            break;
        case RUNNING:
            this.consumeMessageService.shutdown();
            this.persistConsumerOffset();
            // 从 Broker 注销 Consumer,与 Producer 注销复用同样的流程
            this.mQClientFactory.unregisterConsumer(this.defaultMQPushConsumer.getConsumerGroup());
            // MQ客户端停止,与 Producer 复用同样的流程
            this.mQClientFactory.shutdown();
            log.info("the consumer [{}] shutdown OK", this.defaultMQPushConsumer.getConsumerGroup());
            // 销毁重新平衡服务
            this.rebalanceImpl.destroy();
            // 状态置为已停止
            this.serviceState = ServiceState.SHUTDOWN_ALREADY;
            break;
        case SHUTDOWN_ALREADY:
            break;
        default:
            break;
    }
}

我们是以 push 模式的 Consumer 来分析停止流程,pull 模式 Consumer 的停止流程大同小异,不再做单独分析。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值