总结一下RMQ消费者的一些问题。

RocketMq 消费者

RMQ 消费者
    消息拉取方式
        PUSH方式
            DefaultMQPushConsumer
            系统封装(消息获取方式)
                PullMessageService
                    未处理消息个数超过1000个或消息大小超过100M就延迟拉取
                    顺序消费的时候,拉取消息前需要获取消息消费处理队列的锁
                    消息消费封装成PullCallback,用Netty的ChannelFutureListener异步回调
                    消费者订阅信息的tag进行过滤下
                    把拉取到的消息放到消息消费处理队列中
                    提交消息消费请求到ConsumeMessageService中
                    broker端会返回消息下一个拉取偏移量
            自动调用监听器回调处理
        PULL方式
            DefaultMQPullConsumer
            自己封装
            消息回调由用户控制(需要开发回调操作)
    消息消费模式
        集群模式
            MessageModel.CLUSTERING
            单个consumer消费
        广播模式
            MessageModel.BROADCASTING
            多个Consumer消费
    消息消费方式
        并行消费
            ConsumeMessageConcurrentlyService
        顺序消费
            ConsumeMessageOrderlyService
                获取MessageQueue队列的锁(MessageQueueLock)
                获取消息消费处理队列ProcessQueue的锁,这里是可重入锁
                调用消息业务处理逻辑
                处理消息消费结果
    消费负载均衡
        客户端进行
        按消息队列和消费者进行
        核心类:RebalanceService 
        分级负载:整体安装GROUP,TOPIC负载按照consumer实例
    负载均衡
        广播负载均衡
            广播是需要处理主题下的所有消息队列
        集群负载均衡
            集群是需要处理根据负载均衡策略产生的队列
    在重复消费的问题
        集群模式下消息消费失败会进行重试
            消息发送到broker
            broker会为每个消费组设置一个retry topic
        更新MessageQueue的消息消费偏移量
            先更新到本地缓存中, 
            后续有定时任务会进行消费进度的持久化

相关文章: