RocketMQ使用filter筛选消息的时候报错:The broker does not support consumer to filter message by SQL92

问题描述:使用RocketMQ筛选同一Topic同一Tag下的消息

  1. 使用producer发送消息时,设置属性
 Message msg = new Message("TOPIC_FILTER",
                    	   "TAG_FILTER",
                          ("HELLO ROCKETMQ FILTER"+i).getBytes(RemotingHelper.DEFAULT_CHARSET));
 //设置属性
 msg.putUserProperty("a",String.valueOf(i));
  1. 使用consumer消费消息的时,筛选消息
//根据设置的消息的属性进行过滤,若消息存在属性a,且值在[0-3]之间的闭区间内,则订阅
consumer.subscribe("TOPIC_FILTER",MessageSelector.bySql("a between 0 and 3"));
  1. 启动的时候报错
org.apache.rocketmq.client.exception.MQClientException: CODE: 1  DESC: The broker does not support consumer to filter message by SQL92

解决办法

  1. 找到RocketMQ的安装目录的conf/2m-2s-async下的broker-a.properties主配置文件,增加如下配置
#是否支持根据属性过滤 如果使用基于标准的sql92模式过滤消息则改参数必须设置为true
enablePropertyFilter=true
  1. 停止broker服务
sh bin/mqshutdown broker
  1. 重新指定修改后配置文件启动broker
nohup sh bin/mqbroker -n localhost:9876 -c conf/2m-2s-async/broker-a.properties &
  1. 在RocketMQ的console下可以看到更新后的值为true。
    在这里插入图片描述

扩展

consumer消费端可以筛选消息

public void subscribe(final String topic, final MessageSelector messageSelector)
  1. 通过指定的Tag过滤
  consumer.subscribe("TopicTest","TagA");
  1. 通过*,获取该Topic下所有的消息
 consumer.subscribe("TopicTest","*");
  1. 通过||,获取指定Tag下的消息
  consumer.subscribe("TopicTest", "TagA || TagC || TagD");
  1. 通过SQL92,获取匹配的消息
 // only subsribe messages have property a, also a >=0 and a <= 3:只订阅消息中属性a属性且值在【0-3】之间的消息
        consumer.subscribe("TOPIC_FILTER",
                MessageSelector.bySql("a between 0 and 3"));

RocketMQ仅定义了一些基本语法来支持此功能。您也可以轻松扩展它。
数值比较,如>,>=,<,<=,BETWEEN,=;
字符比较,如=,<>,IN; IS NULL或IS NOT NULL;
逻辑AND,OR,NOT,
‘常量类型为:
数值,例如123、3.1415;
字符,例如“ abc”,必须用单引号引起来;
NULL,特殊常数;
布尔,TRUE或FALSE

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值