问题描述:
在一个进程中同一个消费组创建多个消费者会出现The consumer group [groupName] has been created before, specify another name please.
DefaultMQPushConsumer consumer1 = new DefaultMQPushConsumer();
consumer1.setConsumerGroup(groupName);
consumer1.setNamesrvAddr(namesServer);
consumer1.start();
DefaultMQPushConsumer consumer2 = new DefaultMQPushConsumer();
consumer2.setConsumerGroup(groupName);
consumer2.setNamesrvAddr(namesServer);
consumer2.start();
原因分析:
org.apache.rocketmq.client.impl.consumer.DefaultMQPushConsumerImpl#start()
boolean registerOK = mQClientFactory.registerConsumer(this.defaultMQPushConsumer.getConsumerGroup(), this);
public boolean registerConsumer(final String group, final MQConsumerInner consumer) {
if (null == group || null == consumer) {
return false;
}
MQConsumerInner prev = this.consumerTable.putIfAbsent(group, consumer);
if (prev != null) {
log.warn("the consumer group[" + group + "] exist already.");
return false;
}
return true;
}
if (!registerOK) {
this.serviceState = ServiceState.CREATE_JUST;
this.consumeMessageService.shutdown();
throw new MQClientException("The consumer group[" + this.defaultMQPushConsumer.getConsumerGroup()
+ "] has been created before, specify another name please." + FAQUrl.suggestTodo(FAQUrl.GROUP_NAME_DUPLICATE_URL),
null);
}
可以看到 在注册消费者的时候是以消费者组作为key,消费者作为value存到消费者缓存Map中,因此在同一个客户端实例使用相同的消费者组会提示The consumer group has been created before, specify another name please.
解决方案:
- 使用 不同消费者组
- 使用不同的客户端实例(参考 https://blog.csdn.net/weixin_35973945/article/details/109090827)