中唯建设工程有限公司网站,做网站页面对PS切图,如何搭建系统平台,重庆网站设计定制前言
本篇文章比较简单#xff0c;分别介绍RocketMQ支持几种过滤机制#xff0c;其原理和使用。
RocketMQ 提供了多种消息过滤机制#xff0c;帮根据业务需求高效筛选消息#xff0c;可以减少不必要的消息传输和处理。以下是其核心过滤机制及使用场景#xff1a; 1. Tag…前言
本篇文章比较简单分别介绍RocketMQ支持几种过滤机制其原理和使用。
RocketMQ 提供了多种消息过滤机制帮根据业务需求高效筛选消息可以减少不必要的消息传输和处理。以下是其核心过滤机制及使用场景 1. Tag 标签过滤
原理 每个消息发送时可附加一个 Tag字符串标签消费者订阅时指定一个或多个 TagBroker 会过滤出匹配 Tag 的消息投递给消费者。使用方式 生产者发送消息时设置 setTags。Message msg new Message(TopicTest, TagA, Hello RocketMQ.getBytes());消费者订阅时指定 Tag支持 * 表示全部|| 表示或关系。consumer.subscribe(TopicTest, TagA || TagB);特点 高效Broker 端过滤性能损耗低。简单仅支持精确匹配适用于简单分类场景如订单状态分类。 2. SQL92 属性过滤
原理 基于消息的 自定义属性Key-Value通过 SQL 表达式进行复杂条件过滤如数值比较、逻辑运算。需开启 Broker 的 enablePropertyFiltertrue。使用方式 生产者为消息添加自定义属性。Message msg new Message(TopicTest, TagA, Hello RocketMQ.getBytes());
msg.putUserProperty(a, 10);
msg.putUserProperty(b, 5);消费者订阅时编写 SQL 表达式。consumer.subscribe(TopicTest, MessageSelector.bySql(a 5 AND b 5));特点 灵活支持复杂逻辑如 , , BETWEEN, IS NULL 等。性能损耗相比 Tag 过滤略高需评估表达式复杂度。 3. 类过滤Class Filter
原理 允许用户自定义 Java 类实现过滤逻辑Broker 加载该类并调用其方法判断消息是否投递。适用于高度定制化的过滤需求。使用方式 实现接口编写类实现 org.apache.rocketmq.common.filter.MessageFilter。public class CustomFilter implements MessageFilter {Overridepublic boolean match(MessageExt msg, FilterContext context) {// 自定义过滤逻辑return msg.getUserProperty(region).equals(CN);}
}部署类将编译后的类文件上传到 Broker 指定路径需配置 filterSupportRetrytrue。消费者订阅指定过滤类名。consumer.subscribe(TopicTest, MessageSelector.byFilterClass(com.example.CustomFilter));特点 高度灵活可编写任意复杂逻辑如结合外部配置或数据库。维护成本高需管理类的版本和部署适合有特殊需求的场景。 对比与选型建议
机制性能灵活性适用场景Tag 过滤高低精确匹配简单分类如订单状态、日志类型SQL92中高复杂属性条件如价格范围、地域类过滤低极高自定义特殊逻辑需动态规则或外部查询 注意事项
Broker 配置SQL 和类过滤需 Broker 开启支持enablePropertyFilter 或 filterSupportRetry。版本兼容性SQL92 过滤需 RocketMQ 4.3.0类过滤需 4.6.0。生产环境慎用类过滤频繁更新过滤类可能导致服务中断建议优先使用 Tag 或 SQL 过滤。
通过合理选择过滤机制可以显著提升消息系统的效率和可维护性。