开发者学堂课程【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,
con
text)
For (messaext msg:msg){
System.out.println(
‘’
consumethread
’’
+
T
h
re
a
d.curenthre
a
d
()g
etName() +","+ new string(nsg
.
getHody
()
));
}
return ConsumeConcurrentlyStatus.CO
N
SME
_
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;
Publi
c
class Consumer
{
public static v
o
id main(string
[
] args) throws Exception
{
DefaultMQPushConsumerconsumer
=
newDefaultMQPushConsumer(
consumerGroup: “group
1
”);
consumer.setNamesrvAddr(“192.168.25.135:9876;192.168.25.138:9876);
consu
m
er.subscribe(topic:“FilterTagTopic", subExpression:“Tag1 II Tag
2
");
consumer.registerMessageListener((MessageListenerConcurrently)(msgs,context){
for (MessageExt sg :msgs)
{
system.out.println("consumeThrea
d=
”+ 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就都能分别收到了。