开发者学堂课程【RocketMQ知识精讲与项目实战(第一阶段):Tag过滤】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/702/detail/12387
Tag过滤
内容介绍:
一、设置 tag
二、消费多个 tag
一、设置tag
首先创建一个 producer,再来一个 consumer,同样的将之前的内容粘贴至producer 和 consumer 中,先把 producer 的 topic 改为 filtertagtopic,然后在发送的时候,就可以指定当前的 tag1,发三条。
public static void main(String[] args) throws Exception {
//1.创建消费 Consuner,制定消费者组名
DefaultMQPushConsumerconsumer=new DefaultMQPushConsumer( consumerGroup:"group1");
//指定nameserver地址consumer,setNanesrvAddr(“192.168.25.135:9876;192.168.25.138:987
6);
//3订阅主题Topic 和Tag
consumer.subscribe(topic:“FilterTagTopic", subExpression:"*“);
//4.设置回调函数,处理消息
for (MessageExt msg:msgs){ consumer.registerMessageListener((MessageListenerConcurrently)(msgs,context)
For (messaext msg:msg){
System.out.println(‘’consumethread’’+Thread.curenthread 
()getName() +","+ new string(nsg.getHody()));
}
return ConsumeConcurrentlyStatus.CONSME_SUCCESS;
});
Corsumet Producer(2) 
C:\develop\Java\jdi1.8.0_161\bin\java.exe ...
然后在消费者这边,就可以指定消费这个主题的哪一条消息,比如说就消费 tag1。
现在启动 producer,然后发送成功后就会打印发送的结果“消费者启动”。启动
consumer,收到了三条 tag1的消息。
Consumethread=consumemessagethread_1,hello world2
Consumethread=consumemessagethread_1,hello world1
Consumethread=consumemessagethread_1,hello world0 
现在将 producer 的指定改为 tag2,此时消费者没有消费,因为只能消费 tag1的消息。
import java.util.list;
Public class Consumer {
public static void main(string[] args) throws Exception {
DefaultMQPushConsumerconsumer=newDefaultMQPushConsumer(
consumerGroup: “group1”);consumer.setNamesrvAddr(“192.168.25.135:9876;192.168.25.138:9876);
consumer.subscribe(topic:“FilterTagTopic", subExpression:“Tag1 II Tag2");
consumer.registerMessageListener((MessageListenerConcurrently)(msgs,context){
for (MessageExt sg :msgs){
system.out.println("consumeThread=”+ Thread.currentThread().getname() +”,"+ new String(msg.getBody()));
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
});
Consume.start();
System.out.println(“消费者启动”);
}
}
二、消费多个tag
如果既想消费 tag1,也想消费 tag2,只要在 consumer 中填写 tag1||tag2 即可,所以想要消费多个 tag 时就用||这个符号往后写就可以了,但如果想要消费的太多时,就可以用*来表示,在演示过程中,tag1 和 tag2就都能分别收到了。
 
                             
                 
                