解决方案一:
rocketmq 报 The consumer group has been created before, specify another name please. 错误
是因为一个springboot服务配置了多个consumer,但没有指定instanceName。确保instanceName唯一就可以,consumer的实例名,在同一个group中保证唯一,可以用Topic名。
consumer.setInstanceName("consumer-instance-1");
consumer2.setInstanceName("consumer-instance-2");
@RocketMQMessageListener(
consumerGroup = "desuo-dms",
topic = "desuo_workflow_abc",
selectorExpression = "PROCESS_STARTED"
)
@Service
public class ProcessStartedConsumer implements RocketMQListener<ProcessStarted>, RocketMQPushConsumerLifecycleListener {
@Override
public void onMessage(ProcessStarted message) {
System.out.println("消息消费");
}
@Override
public void prepareStart(DefaultMQPushConsumer consumer) {
//设置当前实例的名称
consumer.setInstanceName("这里保证不重复即可");
}
}
方案二:
采用spring cloud构建的stream
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-stream-rocketmq</artifactId> </dependency>
因为要配置两个分组,需要分两次启动,第一次配置为:
spring:
cloud:
stream:
rocketmq:
binder:
group: group-001
bindings:
input1:
group: group-001
启动后,在控制台查看已经创建了分组:
然后修改刚才的配置为:
spring:
cloud:
stream:
rocketmq:
binder:
group: group-002
bindings:
input2:
group: group-002
启动后,在控制台查看已经创建了分组:
然后将两个consumer恢复正常的配置:
spring:
cloud:
stream:
rocketmq:
binder:
group: group-001 (到现在已经无关紧要了)
bindings:
input1:
group: group-001
input2:
group: group-002
正常启动服务不会报错了。