阿里云mq订阅有几个特点:
1. 同一个topic可以被多个Group订阅,生产者每次生产一个消息,都会广播给订阅了当前topic的所有Group,每个Group均可以独立消费。在topic基础信息里可以看到具体信息
2. 一个Group只能订阅一个topic,否则就会出现订阅不一致,在Group基础信息里可以看到具体信息
3. 一个Group可以对应多个Consumer 实例,Consumer 实例可以理解为不同的机器,在Group基础信息里可以看到具体信息
4. 订阅有两种方式。集群订阅(默认):同一个Group ID所标识的所有Consumer平均分摊消费消息。例如某个Topic有9条消息,一个Group ID有3个Consumer实例,那么在集群消费模式下每个实例平均分摊,只消费其中的3条消息。广播订阅:同一个Group ID所标识的所有Consumer都会各自消费某条消息一次。例如某个Topic有9条消息,一个Group ID有3个Consumer实例,那么在广播消费模式下每个实例都会各自消费9条消息。
综上可能出现订阅失败的几种情况:
1.一个Group订阅了多个topic,导致订阅不一致
2. 一个Group对应了多个实例,并且订阅模式为集群订阅。这种情况下同一个消息只会被Group下的其中一个Consumer消费。如果当前有Consumer1、Consumer2两个Consumer,并且Consumer1不支持消费tag1,那么tag1这类消息被Consumer1抢到消费的话相当于消息丢失,而且多次重试会发现偶尔能成功,因为有时候Consumer2抢到消费了
这种情况在阿里云后台的Group信息中很容易看出来,如果Consumer列表中出现了意料之外的机器,那么就要小心了