消费模式
第一种:消费者为同一个组下的,订阅的是同一个topic和tag的情况
这样的就是消费者组成了一个集群,有多个实例,之后就是topic中的消息只会被这些实例中的其中一个消费;
第二种:多个不同组的消费者订阅同一个topic和tag的情况
这样的就是所谓的广播模式,每个消费者都会接收到topic中的消息
rocketMQ中的消息被消费了并不会被删除(究竟保存多久不清楚,一般都需要持久化),消息被消费只是订阅了这个topic的消费者的指针的移动。
上边写的两种情况的理解 第一种是所有的消费者因为是同一个组的 共用的同一个指针,所以只会被消费一次;
而第二种的是不同组的消费者生成了各自的指针,也就是各管个的,每个组对应自己的一个指针,所以会出现所谓的广播模式。
重置消费位点
用过rocketmq的管理控制平台的同学应该都会看到重置消费位点这个功能,由于消费消息也只是对应的消费者的指针的偏移,消息也并没有消失,所以这个重置消费位点也就是指针的来回移动偏移而已。
如下就是消费位点的界面
也很好理解,首先选择消费组,就是你订阅了这个topic的组,下边的时间点就是你要讲指针移动到什么时候,这个好像不能精确到其中的一条消息,只能通过时间来定位。然后就是重置后你选的消费组就开始从你选择的时间点开始消费消息,不过呢这个好像有点小bug还是怎么的 我测试的时候它的时间点好像并没有多么精确 大家可以自行测试。
还有一点 最重要的一点,这个重置消费位点你点过重置后它不会立马重置,你的消费者也不会立马接收到消息,点过重置后,好像会导致消息短暂的失效(这个时间好像是0-3分钟的样子,所以得等一下)
再说一下@RocketMQMessageListener这个监听消息的注解,它的的配置是 @RocketMQMessageListener(nameserver="你的rocketmq的nameserver", topic="你要订阅的topic名字", consumerGroup="你的消费者的组名字", consumerMode=ConsumeMode.ORDERLY(这个是顺序消费,默认是ConsumeMode.CONCURRENT异步多线程消费), selectorExpression="你的tag名字")