RocketMQ入门到入土(七 )为什么同一个消费组设置不同tag会出现奇怪现象
一、问题复现
1、描述
两个一样的Consumer Group的Consumer订阅同一个Topic,但是是不同的tag,Consumer1订阅Topic的tag1,Consumer2订阅Topic的tag2,然后分别启动。这时候往Topic的tag1里发送10条数据,Topic的tag2里发送10条。目测应该是Consumer1和Consumer2分别收到对应的10条消息。结果却是只有Consumer2收到了消息,而且只收到了4-6条消息,不固定。
2、代码
2.1、Consumer
public class Consumer {
public static void main(String[] args) throws MQClientException {
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(“test-consumer”);
consumer.setNamesrvAddr(“124.57.180.156:9876”);
consumer.subscribe(“TopicTest2”,“tag1”);
consumer.registerMessageListener(new MessageListenerConcurrently() {
public ConsumeConcurrentlyStatus consumeMessage(
List msgs, ConsumeConcurrentlyContext context) {
MessageExt msg = msgs.get(0);
System.out.println(msg.getTags());
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
consumer.start();
System.out.println(“ConsumerStarted.”);
}
}
启动这个订阅了TopicTest2的tag1标签的Consumer,然后将tag1改为tag2再次启动Consumer。这就相当于启动了两个Consumer进程,一个订阅了TopicTest2的tag1标签,另一个订阅了TopicTest2的tag2标签。
2.2、Producer
public class Producer {
public static void main(String[] args) throws MQClientException {
final DefaultMQProducer producer = new DefaultMQProducer(“test-producer”);
producer.setNamesrvAddr(“124.57.180.156:9876”);
producer.start();
for (int i = 0; i < 10; i++){
try {
Message msg = new Message("TopicTest2", "tag1", ("Hello tag1 - "+i).getBytes());
SendResult sendResult = producer.send(msg);
System.out.println(sendResult);