在大多数情况下, TAG 是一个简单而有用的设计,其可以来选择您想要的消息。例如:
1 | DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("CID_EXAMPLE"); |
消费者将接收包含 TAGA 或 TAGB 或 TAGC 的消息。但是限制是一个消息只能有一个标签,这对于复杂的场景可能不起作用。在这种情况下,可以使用 SQL 表达式筛选消息。SQL 特性可以通过发送消息时的属性来进行计算。在 RocketMQ 定义的语法下,可以实现一些简单的逻辑。下面是一个例子:
1 | ------------ |
# 基本语法
RocketMQ 只定义了一些基本语法来支持这个特性。你也可以很容易地扩展它。
- 数值比较,比如:
>,>=,<,<=,BETWEEN,=; - 字符比较,比如:
=,<>,IN; IS NULL或者IS NOT NULL;- 逻辑符号
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"); |
# 最后
期望和你一起遇见更好的自己
