当前位置: 首页>编程语言>正文

rocketmq 配置多个producer 在springboot中 rocketmq多个topic对应相同group

1.如果启动生产者或使用者失败,并且错误消息是生产者组或使用者重复?
原因:使用相同的Producer / Consumer组在同一JVM中启动Producer / Consumer的多个实例可能会导致客户端无法启动。
解决方案:确保与一个生产者/消费者组相对应的JVM仅以一个生产者/消费者实例启动。

2.RocketMq同一个消费组group下,每一个consumer都要订阅相同的topic和tag?
消费群体
与前面提到的生产者组相似,角色完全相同的消费者被分组在一起并命名为Consumer Group。
消费者组是一个很棒的概念,通过它,在消息消耗方面实现负载平衡和容错的目标非常容易。
警告:使用者组的使用者实例必须具有完全相同的主题订阅。

话题
主题是生产者传递消息而消费者提取消息的类别。主题与生产者和消费者之间的关系非常松散。
具体来说,一个主题可能有零个,一个或多个向其发送消息的生产者。
相反,生产者可以发送不同主题的消息。
从消费者的角度来看,一个主题可以由零个,一个或多个消费者组订阅。
与此类似,消费者组可以订阅一个或多个主题,只要该组的实例保持其订阅一致即可。

3.同一个消费组内的各个消费者客户端的订阅相互被覆盖

org.apache.rocketmq.broker.client.ConsumerManager#registerConsumer:这个源码中看出
这步骤是 broker 更新消费者订阅信息的核心方法,如果消费组的消费者信息 ConsumerGroupInfo 为空,
则新建一个,从名字可知道,订阅信息是按照消费组进行存放的,因此在更新订阅信息时,
订阅信息是按照消费组存放的,这步骤就会导致同一个消费组内的各个消费者客户端的订阅信息相互被覆盖。

4.RocketMQ生产者GroupName和消费者GroupName有直接关系吗?
a . 如果生产者指定groupnameA,有两个消费者,且消费的时候用的是groupnameB,但是topic和tag生产者生产的时候一样,这种情况下会怎么样? 答案:消费者会正常负载均衡消费到消息
b . 如果再启动一个消费者groupnameA和生产者组保持一致,那么生产者groupnameA所产生的消息全部能被再次消费一遍

结论:同一个组内,消费过的,返回return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;后,当前组认为这条消息已经被消费过了
另外一个组中,只要topic和tag一致,同样能再次消费一遍所有的消息
综上:所谓的消费成功,是建立在同组中的相对概念。



https://www.xamrdz.com/lan/5zx1923065.html

相关文章: