Skip to content

Commit dbc30a5

Browse files
committed
add SQL92 demo
1 parent 2181830 commit dbc30a5

4 files changed

Lines changed: 809 additions & 0 deletions

File tree

rocketmq-v5-client-spring-boot-samples/README-CN.md

Lines changed: 190 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -567,6 +567,196 @@ rocketmq.simple-consumer.filter-expression-type=tag
567567

568568
<a name="GSP33"></a>
569569

570+
# SQL92 消息过滤
571+
572+
<a name="SQL92-01"></a>
573+
574+
## 概述
575+
576+
RocketMQ V5 客户端支持 SQL92 消息过滤功能,允许消费者根据消息属性进行复杂的条件过滤。
577+
578+
### 支持的过滤类型
579+
580+
1. **TAG 过滤**(默认):基于 Tag 的简单过滤
581+
2. **SQL92 过滤**:基于消息属性的复杂条件过滤
582+
583+
<a name="SQL92-02"></a>
584+
585+
## 配置说明
586+
587+
### application.properties 配置
588+
589+
```properties
590+
# 基本配置
591+
rocketmq.simple-consumer.endpoints=localhost:8081
592+
rocketmq.simple-consumer.consumer-group=sql92Group
593+
rocketmq.simple-consumer.topic=sql92Topic
594+
595+
# TAG 过滤(默认)
596+
rocketmq.simple-consumer.tag=*
597+
rocketmq.simple-consumer.filter-expression-type=tag
598+
599+
# SQL92 过滤
600+
# rocketmq.simple-consumer.tag=(type = 'vip' AND amount > 500)
601+
# rocketmq.simple-consumer.filter-expression-type=sql92
602+
```
603+
604+
<a name="SQL92-03"></a>
605+
606+
## SQL92 表达式语法
607+
608+
### 比较操作符
609+
610+
- `=` : 等于
611+
- `<>` : 不等于
612+
- `>` : 大于
613+
- `<` : 小于
614+
- `>=` : 大于等于
615+
- `<=` : 小于等于
616+
- `BETWEEN` : 在某个范围内
617+
- `IN` : 在集合中
618+
- `LIKE` : 模糊匹配
619+
620+
### 逻辑操作符
621+
622+
- `AND` : 与
623+
- `OR` : 或
624+
- `NOT` : 非
625+
626+
<a name="SQL92-04"></a>
627+
628+
## 使用示例
629+
630+
### 示例 1:简单等值过滤
631+
632+
只消费 type='vip' 的消息:
633+
634+
```properties
635+
rocketmq.simple-consumer.filter-expression-type=sql92
636+
rocketmq.simple-consumer.tag=(type = 'vip')
637+
```
638+
639+
发送消息时添加属性:
640+
641+
```java
642+
Message<?> message = MessageBuilder.withPayload(order)
643+
.setHeader("type", "vip")
644+
.build();
645+
```
646+
647+
### 示例 2:数值范围过滤
648+
649+
消费金额在 100-1000 之间的订单:
650+
651+
```properties
652+
rocketmq.simple-consumer.filter-expression-type=sql92
653+
rocketmq.simple-consumer.tag=(amount >= 100 AND amount <= 1000)
654+
```
655+
656+
### 示例 3:多条件组合
657+
658+
消费 VIP 用户且金额大于 500 的订单:
659+
660+
```properties
661+
rocketmq.simple-consumer.filter-expression-type=sql92
662+
rocketmq.simple-consumer.tag=(type = 'vip' AND amount > 500)
663+
```
664+
665+
### 示例 4:IN 操作符
666+
667+
消费特定地区的订单:
668+
669+
```properties
670+
rocketmq.simple-consumer.filter-expression-type=sql92
671+
rocketmq.simple-consumer.tag=(region IN ('Beijing', 'Shanghai', 'Guangzhou'))
672+
```
673+
674+
### 示例 5:LIKE 模糊匹配
675+
676+
消费以 A 开头的产品类别:
677+
678+
```properties
679+
rocketmq.simple-consumer.filter-expression-type=sql92
680+
rocketmq.simple-consumer.tag=(category LIKE 'A%')
681+
```
682+
683+
<a name="SQL92-05"></a>
684+
685+
## 消费者代码示例
686+
687+
```java
688+
@Service
689+
@RocketMQMessageListener(
690+
endpoints = "${demo.sql92.rocketmq.endpoints:}",
691+
topic = "${demo.sql92.rocketmq.topic:}",
692+
consumerGroup = "${demo.sql92.rocketmq.consumer-group:}",
693+
tag = "${demo.sql92.rocketmq.tag:}",
694+
filterExpressionType = "${demo.sql92.rocketmq.filter-expression-type:sql92}"
695+
)
696+
public class SQL92FilterConsumer implements RocketMQListener {
697+
698+
@Override
699+
public ConsumeResult consume(MessageView messageView) {
700+
log.info("收到 SQL92 过滤消息 - ID: {}, 属性:{}",
701+
messageView.getMessageId(),
702+
messageView.getProperties());
703+
return ConsumeResult.SUCCESS;
704+
}
705+
}
706+
```
707+
708+
<a name="SQL92-06"></a>
709+
710+
## 生产者代码示例
711+
712+
```java
713+
@SpringBootApplication
714+
public class SQL92ProducerApplication implements CommandLineRunner {
715+
716+
@Resource
717+
private RocketMQClientTemplate rocketMQClientTemplate;
718+
719+
@Override
720+
public void run(String... args) throws ClientException {
721+
// 发送带属性的消息
722+
Message<?> message = MessageBuilder.withPayload("VIP Order")
723+
.setHeader("type", "vip")
724+
.setHeader("amount", 600)
725+
.setHeader("region", "Beijing")
726+
.build();
727+
728+
rocketMQClientTemplate.syncSendNormalMessage("orderTopic", message);
729+
}
730+
}
731+
```
732+
733+
<a name="SQL92-07"></a>
734+
735+
## 注意事项
736+
737+
1. **属性名称限制**
738+
- 属性名称不能包含空格和特殊字符
739+
- 建议使用字母、数字和下划线
740+
741+
2. **性能考虑**
742+
- SQL92 过滤比 TAG 过滤更消耗资源
743+
- 简单的过滤场景优先使用 TAG 过滤
744+
745+
3. **表达式长度**
746+
- SQL92 表达式长度有限制,不宜过长
747+
748+
4. **数据类型**
749+
- 确保发送的消息属性类型与过滤表达式中的类型一致
750+
- 字符串值需要用单引号包裹
751+
752+
5. **NULL 值处理**
753+
- 使用 `IS NULL``IS NOT NULL` 判断空值
754+
- 不要使用 `= NULL`
755+
756+
详细示例请参考 [SQL92_USAGE.md](SQL92_USAGE.md)
757+
758+
<a name="GSP33"></a>
759+
570760
# ACL功能
571761

572762
<a name="PavXQ"></a>

0 commit comments

Comments
 (0)