技术主题
集群消费模式下,提高消费者的负载能力,必然要增加消费者的数量,消费者的数量增加了,如何做到尽量平均的消费消息,以及队列如何分配给对应的消费者
技术原理
从源码的角度去理解-消费者增加时候会引起rebalance
1)DefaultMQPushConsumerImpl–start()
2)MQClientInstance调用了rebalanceService()
3)RebalanceService的run方法
4)在DefaultMQPushConsumerImpl的start方法末尾还有一句
this.mQClientFactory.rebalanceImmediately()
AllocateMessageQueueStrategy有6种实现的策略,
1-连续分配
2-每人轮流一个
3-通过配置
4-一致性哈希
5-指定一个broker的topic中的queue消费
6-按Broker的机房就近分配
技术原理-重试
消费异常,重试队列的消息会过一段时间再次发送给消费者,如果还是异常,则会进入重试队列。。从10秒开始直到2个小时:10s, 30s,1m,2m,3m,4m,5m,6m,7m,8m,9m,10m,20m,30m,1h,2h.重试16次。
进入死信队列,需要人工处理,单独写一个线程,订阅%DLQ% + ConsumerGroupName,消费消息