RocketMQ SQL过滤器 MessageSelector.bySql的使用

依赖

<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-common</artifactId>
    <version>4.9.1</version>
</dependency>
<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-client</artifactId>
	<version>4.9.1</version>
</dependency>

发送消息

/**
 * 使用SQl过滤
 * @throws Exception
 */
public void sendMessageUseSql() throws Exception {
    DefaultMQProducer producer = new DefaultMQProducer("mygroup");
    //设置nameserver
    producer.setNamesrvAddr("127.0.0.1:9876");
    producer.start();
    for (int i = 0; i < 30; i++) {
        //topic -- 消息要发送的地址; body -- 具体的消息
        Message message = new Message("mytopic", ("message\t" + i).getBytes());
        message.putUserProperty("id", String.valueOf(i));
        producer.send(message);
    }
    System.out.println("发送完成");
    //关闭连接
    producer.shutdown();
}

接收消息

/**
 * 使用SQl过滤
 * @throws Exception
 */
public void receiveMessageUseSql() throws Exception {
    DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("mygroupp");
    //设置nameserver
    consumer.setNamesrvAddr("127.0.0.1:9876");
    //topic -- 关注的消息地址; * -- 不过滤
    MessageSelector messageSelector = MessageSelector.bySql("id > 15 and id < 25");
    consumer.subscribe("mytopic", messageSelector);
    consumer.registerMessageListener(new MessageListenerConcurrently() {
        @Override
        public ConsumeConcurrentlyStatus consumeMessage(
                List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
            for (MessageExt messageExt : list) {
                byte[] body = messageExt.getBody();
                String s = new String(body);
                System.out.println(s);
            }
            return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
        }
    });
    consumer.start();
}
posted @ 2022-03-07 18:03  叕叕666  阅读(99)  评论(0)    收藏  举报