分布式消息队列RocketMQ
四、 RocketMQ应用
4.6)消息过滤
消息者在进行消息订阅时,除了可以指定要订阅消息的Topic外,还可以对指定Topic中的消息根据指定条件进行过滤,即可以订阅比Topic更加细粒度的消息类型。
对于指定Topic消息的过滤有两种过滤方式:Tag过滤与SQL过滤。
4.6.1)Tag过滤
通过consumer的subscribe()方法指定要订阅消息的Tag。
如果订阅多个Tag的消息,Tag间使用或运算 符(双竖线||)连接,如下:
DefaultMQPushConsumer consumer = new
DefaultMQPushConsumer("CID_EXAMPLE");
consumer.subscribe("TOPIC", "TAGA || TAGB || TAGC");
4.6.2)SQL过滤
SQL过滤是一种通过特定表达式对事先埋入到消息中的用户属性进行筛选过滤的方式。
通过SQL过滤, 可以实现对消息的复杂过滤;不过只有使用PUSH模式的消费者才能使用SQL过滤。
SQL过滤表达式中支持多种常量类型与运算符。
4.6.2.1)支持的常量类型
数值:比如:123,3.1415
字符:必须用单引号包裹起来,比如:'abc'
布尔:TRUE 或 FALSE
NULL:特殊的常量,表示空
4.6.2.2)支持的运算符
数值比较:>,>=,<,<=、BETWEEN,=
字符比较:=,<>、IN
逻辑运算 : AND、OR、NOT
NULL判断:IS NULL 或者 IS NOT NULL
4.6.2.3)开启消息的SQL过滤功能
默认情况下Broker没有开启消息的SQL过滤功能,需要在Broker加载的配置文件中添加如下属性,以开启该功
能:
enablePropertyFilter = true
在启动Broker时需要指定这个修改过的配置文件;例如对于单机Broker的启动,其修改的配置文件是 conf/broker.conf,启动时使用如下命令:
sh bin/mqbroker -n localhost:9876 -c conf/broker.conf &
4.6.3)代码实现案例
4.6.3.1)定义Tag过滤生产者
// 定义Tag过滤生产者
p

RocketMQ提供消息过滤功能,允许消费者在订阅时根据Tag或SQL表达式进行消息筛选。Tag过滤通过subscribe()方法指定订阅的Tag,支持多个Tag的或运算。SQL过滤则使用用户属性进行复杂筛选,支持数值、字符、布尔和NULL常量及多种运算符,但仅限于PUSH模式消费者。启用SQL过滤需配置Broker,并通过示例代码展示了Tag和SQL过滤的生产者与消费者实现。
最低0.47元/天 解锁文章
2280

被折叠的 条评论
为什么被折叠?



