rocketmq 消息过滤


rocketmq 消息过滤

 

官网:http://rocketmq.apache.org/docs/filter-by-sql92-example/

 

 

*******************

tag 过滤:简单过滤

 

同一个应用尽可能使用同一个topic,不同的消息子类型使用不同的tag标识

每个message只能使用一个tag

 

Message message=new Message("topic","tagA","hello world".getBytes());  //消息标识tagA
Message message=new Message("topic","tagB","hello world".getBytes());  //消息标识tagB
Message message=new Message("topic","tagC","hello world".getBytes());  //消息标识tagC


DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("CID_EXAMPLE");
consumer.subscribe("TOPIC", "TAGA || TAGB || TAGC");   //订阅TAGA、TAGB、TAGC标识消息
consumer.subscribe("TOPIC", "*");                      //订阅所有标识的消息

 

 

*******************

sql 过滤:添加自定义属性,进行一些复杂过滤

 

支持的数据类型:数字、字符串(使用单引号,如:'abc')、null、true | false

 

数字比较:>、>=、<、<=、between、=

字符串:=、<>、in

is null、is not null

and、or、not

 

                    

 

msg.putUserProperty("a", "2");  //设置消息属性


consumer.subscribe("TopicTest", MessageSelector.bySql("a between 0 and 3");  //sql过滤,a在0、3之间

 

 

*******************

示例

 

***************

配置文件

 

application.yml

rocketmq:
  name-server: 192.168.57.2:9876
  producer:
    group: producerGroup

 

***************

service 层

 

ProducerService:发送消息


@Service
public class ProducerService {

    @Resource
    private RocketMQTemplate rocketMQTemplate;

    public void send(){
       SendResult result=rocketMQTemplate.syncSend("topic-test:tag",
                MessageBuilder.withPayload("hello 瓜田李下 tag").build());  //设置标签:tag
       System.out.println(result);
    }

    public void send2(){
        SendResult result=rocketMQTemplate.syncSend("topic-test:tag2",
                MessageBuilder.withPayload("hello 瓜田李下 tag2").build());  //设置标签:tag2
        System.out.println(result);
    }

    public void send3(){
        SendResult result=rocketMQTemplate.syncSend("topic-test",
                MessageBuilder.withPayload("hello 瓜田李下 num=2")
                        .setHeader("num","2").build());  //设置userProperty:num = 2
        System.out.println(result);
    }

    public void send4(){
        SendResult result=rocketMQTemplate.syncSend("topic-test",
                MessageBuilder.withPayload("hello 瓜田李下 num=6")
                        .setHeader("num","6").build());  //设置userProperty:num = 6
        System.out.println(result);
    }

    public void send5(){
        SendResult result=rocketMQTemplate.syncSend("topic-test",
                MessageBuilder.withPayload("hello 瓜田李下 name=瓜田李下")
                        .setHeader("name","瓜田李下").build());  //设置userProperty:name=瓜田李下
        System.out.println(result);
    }

    public void send6(){
        SendResult result=rocketMQTemplate.syncSend("topic-test",
                MessageBuilder.withPayload("hello 瓜田李下 name=海贼王")
                        .setHeader("name","海贼王").build());    //设置userProperty:name=海贼王
        System.out.println(result);
    }
}

 

 

ConsumerService:消费标签为tag的消息

@Service
@RocketMQMessageListener(consumerGroup = "consumerGroup",topic = "topic-test",selectorExpression = "tag")
public class ConsumerService implements RocketMQListener<String> {

    @Override
    public void onMessage(String s) {
        System.out.println("消费标签为tag的消息:"+s);
    }
}

 

ConusmerService:消费标签为tag2的消息

@Service
@RocketMQMessageListener(consumerGroup = "consumerGroup2",topic = "topic-test",selectorExpression ="tag2")
public class ConsumerService2 implements RocketMQListener<String> {

    @Override
    public void onMessage(String s) {
        System.out.println("消费标签为tag2的消息:"+s);
    }
}

 

ConusumerService3:sql过滤,num=1

@Service
@RocketMQMessageListener(consumerGroup = "consumerGroup3",topic = "topic-test",selectorType = SelectorType.SQL92,selectorExpression = "num=2",messageModel = MessageModel.BROADCASTING)
public class ConsumerService3 implements RocketMQListener<String> {

    @Override
    public void onMessage(String s) {
        System.out.println("消费userProperty(num=2)的消息:"+s);
    }
}

 

ConsumerService4:sql过滤,num>4

@Service
@RocketMQMessageListener(consumerGroup = "consumerGroup4",topic = "topic-test",selectorType = SelectorType.SQL92,selectorExpression = "num>4")
public class ConsumerService4 implements RocketMQListener<String> {

    @Override
    public void onMessage(String s) {
        System.out.println("消费userProperty(num>4)的消息:"+s);
    }
}

 

 

ConsumerService5:sql过滤,name='瓜田李下'

@Service
@RocketMQMessageListener(consumerGroup = "consumerGroup5",topic = "topic-test",selectorType = SelectorType.SQL92,selectorExpression = "name='瓜田李下'")
public class ConsumerService6 implements RocketMQListener<String> {

    @Override
    public void onMessage(String s) {
        System.out.println("消费userProperty(name=瓜田李下)的消息:"+s);
    }
}

 

ConsumerService6:sql过滤,name<>'瓜田李下'

@Service
@RocketMQMessageListener(consumerGroup = "consumerGroup6",topic = "topic-test",selectorType = SelectorType.SQL92,selectorExpression = "name<>'瓜田李下'",messageModel = MessageModel.BROADCASTING)
public class ConsumerService6 implements RocketMQListener<String> {

    @Override
    public void onMessage(String s) {
        System.out.println("消费userProperty(name<>瓜田李下)的消息:"+s);
    }
}

 

***************

controller 层

 

HelloController

@RestController
public class HelloController {

    @Resource
    private ProducerService producerService;

    @RequestMapping("/hello")
    public void hello(){
        producerService.send();
        producerService.send2();
        producerService.send3();
        producerService.send4();
        producerService.send5();
        producerService.send6();

        System.out.println("发送完成");
    }
}

 

 

*******************

使用测试

 

localhost:8080/hello

SendResult [sendStatus=SEND_OK, msgId=240E03A1BC903BE008318B12F802000303543FEE733D69C889B00000, offsetMsgId=C0A8390300002A9F0000000000000000, messageQueue=MessageQueue [topic=topic-test, brokerName=broker-a, queueId=1], queueOffset=0]
SendResult [sendStatus=SEND_OK, msgId=240E03A1BC903BE008318B12F802000303543FEE733D69C88A0E0002, offsetMsgId=C0A8390300002A9F000000000000014D, messageQueue=MessageQueue [topic=topic-test, brokerName=broker-a, queueId=2], queueOffset=0]
SendResult [sendStatus=SEND_OK, msgId=240E03A1BC903BE008318B12F802000303543FEE733D69C88A110004, offsetMsgId=C0A8390300002A9F000000000000029C, messageQueue=MessageQueue [topic=topic-test, brokerName=broker-a, queueId=3], queueOffset=0]
SendResult [sendStatus=SEND_OK, msgId=240E03A1BC903BE008318B12F802000303543FEE733D69C88A140006, offsetMsgId=C0A8390300002A9F00000000000003E8, messageQueue=MessageQueue [topic=topic-test, brokerName=broker-a, queueId=0], queueOffset=0]
SendResult [sendStatus=SEND_OK, msgId=240E03A1BC903BE008318B12F802000303543FEE733D69C88A1A0008, offsetMsgId=C0A8390300002A9F0000000000000534, messageQueue=MessageQueue [topic=topic-test, brokerName=broker-a, queueId=1], queueOffset=1]
SendResult [sendStatus=SEND_OK, msgId=240E03A1BC903BE008318B12F802000303543FEE733D69C88A1E000A, offsetMsgId=C0A8390300002A9F0000000000000698, messageQueue=MessageQueue [topic=topic-test, brokerName=broker-a, queueId=2], queueOffset=1]
发送完成
消费userProperty(num>4)的消息:hello 瓜田李下 num=6
消费标签为tag2的消息:hello 瓜田李下 tag2
消费userProperty(name<>瓜田李下)的消息:hello 瓜田李下 name=海贼王
消费userProperty(name=瓜田李下)的消息:hello 瓜田李下 name=瓜田李下
消费标签为tag的消息:hello 瓜田李下 tag
消费userProperty(num=2)的消息:hello 瓜田李下 num=2

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值