RocketMq源码解析-Consumer

Consumer源码解析:
DefaultMQPushConsumer.start():
    1:设置消费者组
    2:启动消费者this.defaultMQPushConsumerImpl.start();
        DefaultMQPushConsumerImpl.strat()(同步方法):
            1:判断服务状态 只有 服务状态为 CREATE_JUST 时,才启动 Consumer
            2:防止启动多个 Consumer,先把 服务状态修改为 START_FAILED
            3:检验配置信息
                1:group不能为空,不能等于DEFAULT_CONSUMER
                2:消息模式不能为空
                3:消费位置不能为空
                4:consumeTimestamp消费时间是否合法
                5:allocateMessageQueueStrategy分配消息队列策略不能为空
                6:订阅不能为空
                7:消息监听不能为空
                8:消息监听必须是顺序监听(顺序消费)和并发(并发消费)监听中的一种
                9:消费的最小线程数必须在[1,1000] 默认20
                10:消费的最大线程数必须在[1,1000] 默认64
                11:单队列并行消费的最大跨度必须在[1, 65535]
                12:pullThresholdForQueue拉消息本地缓存的最大消息数[1, 65535] 默认1000 用于流量控制,队列级别
                13:pullThresholdForTopic拉消息本地缓存的最大消息数[1, 6553500] 默认1000 用于流量控制,topic级别 默认-1不限制
                14:本地缓存大小限制[1, 1024M] 队列级别 默认100M
                15:本地缓存大小限制[1, 102400] topic级别 默认-1不限制
                16:pullInterval拉去时间间隔[0, 65535] 由于是长轮询默认为0ms
                17:consumeMessageBatchMaxSize 批量消费最大消息条数,取值范围: [1, 1024]。默认是1
                18:pullBatchSize 消费者去broker拉取消息时,一次拉取多少条。取值范围: [1, 1024]。默认是32 。可选配置
            4.拷贝订阅信息  存放rebalanceImpl实例对象中,如果为集群消费会将重试的topic一起放入到rebalanceImpl实例对象中
            5.如果为集群消费 该表实例名称
            6:获取mQClientFactory
            7:设置负载均衡相关信息(消费者组,消费模式,分配消息队列策略,mQClientFactory)
            8:pullAPIWrapper 创建拉去API构造器
            9:注册消息过滤钩子
            10:获取偏移量数据(广播消费从本地获取,集群消费从远程获取)
            11:加载偏移量信息
            12:创建消费服务即为消费创建消费线程池(定时线程池)
            13:启动消费
            14:注册消费者(同步方法)写入到消费者表map中this.consumerTable.putIfAbsent(group, consumer);
                注册成功:修改服务状态为CREATE_JUST,启动消费关闭后处理(优雅关闭)
            15:mQClientFactory.start() 启动客户端
            16:修改服务状态为running
            17:更新topic订阅信息当订阅发生变化时(向nameserver更新topic路由信息 加锁)
            18:broker检查客户端
            19:向所有broker发送心跳(加锁)
            20:进行负载均衡(新增加一个消费者,需要进行负载均衡)(唤醒rebalance线程进行负载均衡使用countlatch默认为1个线程)
    3:是否开启消息追踪以及相关处理

你可能感兴趣的:(rocketmq,rocketmq,java)