消费者在发送音讯的时候,有一个分组的概念。也就是说,有一个或者多个消费者的名称,是同一个,这些名称一样的消费者,组成了一个生产组。

比方下图中,两个group_a是一个生产组,两个group_b是一个生产组。

当broker有音讯a进来的时候,那这个音讯都会同时被这两个生产组所生产。

咱们也看到了每个生产组是有多个消费者的,如果音讯被group_a生产的时候,两个消费者是怎么生产的呢?

这里就波及到了集群模式与播送模式两种生产模式。

在集群模式下,这个音讯只能被生产组内一个消费者进行生产。比方group_a是集群模式,那此时只能一个消费者进行生产。

在播送模式下,这个音讯会被生产组下的每一个消费者进行生产比方group_b是播送模式,那此时两个消费者都进行生产。

生产组和生产模式这么重要,所以消费者启动的时候,就须要去校验生产组和生产模式。

构建Topic订阅信息,比方这个消费者须要订阅TopicTest的音讯,就是在这里构建的。这个步骤中,Topic订阅信息是一个map,所以会存在多个的。

根底信息筹备好了,就开始初始化MQClientInstance、RebalanceImple(音讯从新负载实现类)。

初始化音讯进度,这里依据生产模式会有两种状况:

一个是集群模式,因为生产组的几个消费者只能一个进行生产,如果这个消费者挂了,那另外一个消费者须要从之前的地位开始生产,所以这个进度不能保留在本地,须要保留在broker中,最终从broker拉取生产进度。

另外一个是集群模式,消费者的音讯本人保护本人的进度,所以这个进度保留在本人的本地,最终从本地拉取生产进度。

如果音讯是程序生产的,那创立一个程序音讯生产服务,如果不是,则创立并发音讯生产服务,这两个前面来讲细节。

创立好后启动相应的音讯生产服务。

启动消费者客户端,这里的启动跟生产者是一样的,包含音讯从新负载的启动等。