@@ -567,194 +567,6 @@ 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- <a name =" GSP33 " ></a >
757-
758570# ACL功能
759571
760572<a name =" PavXQ " ></a >
0 commit comments