RocketMQ consumer DefaultLitePullConsumerImpl 拉模式

工作过程

        1、从阻塞队列里面消费PullRequest,PullRequest调用netty client做出Response

        2、PullRequest做了本机缓存优化

        3、后台线程处理拉取消息

        4、长轮询优化:使用延时Task处理PullRequest,每隔5秒拉取消息,当处理大批量消息,延迟任务变更为10秒。

       和推模式区别:

       推模式做了封装,Broker启动时会将PullRequest封装起来,通过callback设计模式让consumer自行拉取消息,表面看起来时推消息,实际还是consumer自行拉取。

       拉模式是由consumer主动去拉取消息,自行从阻塞队列里面拉取PullRequest

启动

    public synchronized void start() throws MQClientException {
        switch (this.serviceState) {
            case CREATE_JUST:
                this.serviceState = ServiceState.START_FAILED;

                this.checkConfig();

                if (this.defaultLitePullConsumer.getMessageModel() == MessageModel.CLUSTERING) {
                    this.defaultLitePullConsumer.changeInstanceNameToPID();
                }

                initMQClientFactory();

                initRebalanceImpl();
                
                initPullAPIWrapper();

                initOffsetStore();

                mQClientFactory.start();

                startScheduleTask();

                this.serviceState = ServiceState.RUNNING;

                log.info("the consumer [{}] start OK", this.defaultLitePullConsumer.getConsumerGroup());

                operateAfterRunning();

                break;
            case RUNNING:
            case START_FAILED:
            case SHUTDOWN_ALREADY:
                throw new MQClientException("The PullConsumer service state not OK, maybe started once, "
                    + this.serviceState
                    + FAQUrl.suggestTodo(FAQUrl.CLIENT_SERVICE_NOT_OK),
                    null);
            default:
                break;
        }
    }

消费(拉模式)

负载均衡

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RocketMQ的PushConsumer是一种消息消费者模式,它是基于取模型的实现。尽管消息消费被称为Push,但实际上仍然是通过取的方式来获取消息。\[1\]在RocketMQ中,消费者有两种模式,一种是push模式,另一种是pull模式。在push模式中,当服务端有消息时,将消息推送到客户端。而在pull模式中,客户端需要不断轮询请求服务端来获取新的消息。\[3\]不过,无论是push模式还是pull模式,实际上都是采用消费端主动取的方式,即consumer轮询从broker取消息。\[3\]在PushConsumer中,轮询过程被封装在内部,并通过注册MessageListener监听器来消费消息。当消息到达时,会唤醒MessageListener的consumeMessage()方法来进行消费,给用户一种消息被推送过来的感觉。\[3\]而在PullConsumer中,用户需要自己编写获取消息的逻辑,首先通过打算消费的Topic获取MessageQueue的集合,然后遍历MessageQueue集合,针对每个MessageQueue批量获取消息,一次取完后记录该队列下一次要取的开始offset,直到取完了再切换到另一个MessageQueue。\[3\]所以,PushConsumerRocketMQ中用于实现push模式消息消费的一种消费者。 #### 引用[.reference_title] - *1* [RocketMQ实战-初探PushConsumer限流机制实现原理](https://blog.csdn.net/Huangjiazhen711/article/details/127746551)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [rocketmq源码-consumer取消息(push模式)](https://blog.csdn.net/CPLASF_/article/details/128311025)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [rocketMQ之consumer的push和pull模式](https://blog.csdn.net/qq_26896085/article/details/104958768)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值