发送消息方式:
Producer端在发送消息时,会先根据Topic找到指定的TopicPublishInfo,根据TopicPublishInfo使用随机递增取模算法获取一个MessageQueue发送消息。
RocketMQ官方文档解释: 在RocketMQ中,Consumer端的两种消费模式(Push/Pull)都是基于拉模式来获取消息的,而在Push模式只是对pull模式的一种封装,其本质实现为消息拉取线程在从服务器拉取到一批消息后,然后提交到消息消费线程池后,又“马不停蹄”的继续向服务器再次尝试拉取消息。如果未拉取到消息,则延迟一下又继续拉取。在两种基于拉模式的消费方式(Push/Pull)中,均需要Consumer端知道从Broker端的哪一个消息队列中去获取消息。因此,有必要在Consumer端来做负载均衡,即Broker端中多个MessageQueue分配给同一个ConsumerGroup中的哪些Consumer消费。
RocketMQ消费端负载均衡主要是RebalanceImpl类实现的。
以rebalanceByTopic(final String topic, final boolean isOrder)
方法的集群模式为例: