完整报错信息:

Caused by: org.apache.rocketmq.client.exception.MQClientException: The consumer group[zhaf] has been created before, specify another name please.
See http://rocketmq.apache.org/docs/faq/ for further details.
	at org.apache.rocketmq.client.impl.consumer.DefaultMQPushConsumerImpl.start(DefaultMQPushConsumerImpl.java:628)
	at org.apache.rocketmq.client.consumer.DefaultMQPushConsumer.start(DefaultMQPushConsumer.java:693)
	at org.apache.rocketmq.spring.support.DefaultRocketMQListenerContainer.start(DefaultRocketMQListenerContainer.java:275)
	... 11 common frames omitted

原因:

多个RocketMQMessageListener使用了相同的consumerGroup

解决方案:

1. 每个RocketMQMessageListener用不同的consumerGroup(有点欠揍)

2. 在打了@RocketMQMessageListener注解的类上实现RocketMQPushConsumerLifecycleListener接口,给每个Listener指定不同的listenerName

Listener1

@Service
@RocketMQMessageListener(consumerGroup = "a",
       topic = "topic1",
)
public class Listener1 implements RocketMQListener<String>, RocketMQPushConsumerLifecycleListener {

    @Override
    public void onMessage(String message) {

    }

    @Override
    public void prepareStart(DefaultMQPushConsumer consumer) {
        // 注意看这个地方!! 给当前的listener指定一下InstanceName,不同的listner要使用不同的InstanceName
        consumer.setInstanceName("instance1");
    }
}

 Listener2

@Service
@RocketMQMessageListener(consumerGroup = "a",
       topic = "topic2",
)
public class Listener1 implements RocketMQListener<String>, RocketMQPushConsumerLifecycleListener {

    @Override
    public void onMessage(String message) {

    }

    @Override
    public void prepareStart(DefaultMQPushConsumer consumer) {
        // 注意看这个地方!! 给当前的listener指定一下InstanceName,不同的listner要使用不同的InstanceName
        consumer.setInstanceName("instance2");
    }
}

参考:two @RocketMQMessageListener can't use the same consumerGroup · Issue #237 · apache/rocketmq-spring · GitHub

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐