在大多数情况下, TAG
是一个简单而有用的设计,其可以来选择您想要的消息。例如:
1 | DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("CID_EXAMPLE"); |
消费者将接收包含 TAGA
或 TAGB
或 TAGC
的消息。但是限制是一个消息只能有一个标签,这对于复杂的场景可能不起作用。在这种情况下,可以使用 SQL
表达式筛选消息。SQL 特性可以通过发送消息时的属性来进行计算。在 RocketMQ
定义的语法下,可以实现一些简单的逻辑。下面是一个例子:
1 | ------------ |
# 基本语法
RocketMQ
只定义了一些基本语法来支持这个特性。你也可以很容易地扩展它。
- 数值比较,比如:
>
,>=
,<
,<=
,BETWEEN
,=
; - 字符比较,比如:
=
,<>
,IN
; IS NULL
或者IS NOT NUL
L;- 逻辑符号
AND
,OR
,NOT
; - 常量支持类型为:
- 数值,比如:
123
,3.1415
; - 字符,比如:
'abc'
,必须用单引号包裹起来; NULL
,特殊的常量- 布尔值,
TRUE
或FALSE
- 只有使用
push
模式的消费者才能用使用SQL92
标准的sql
语句,接口如下:1
public void subscribe(finalString topic, final MessageSelector messageSelector)
# 使用样例
# 生产者样例
发送消息时,你能通过 putUserProperty
来设置消息的属性
1 | DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique_group_name"); |
# 消费者样例
用 MessageSelector.bySql
来使用 sql
筛选消息
1 | DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("please_rename_unique_group_name_4"); |
# 最后
期望和你一起遇见更好的自己