十三、RocketMQ源码分析消息过滤机制下篇-FilterServer、ClassFilter模式详解
继上篇源码分析了 Tag 过滤机制实现原理,本文主要阐述 RocketMQ SQL92 表达式与 ClassFilte r过滤机制实现。
1、RocketMQ SQL92实现原理分析
入口:PullMessageProcessor#processRequest
if (!ExpressionType.isTagType(subscriptionData.getExpressionType())) {
consumerFilterData = ConsumerFilterManager.build(
requestHeader.getTopic(), requestHeader.getConsumerGroup(), requestHeader.getSubscription(),
requestHeader.getExpressionType(), requestHeader.getSubVersion()
);
assert consumerFilterData != null;
首先构建ConsumeFilterData数据结构:

-
consumeGroup: 消费组
-
topic : 消息主题
-
expresstion:消息过滤表达式,例如SQL92表达式,或过滤类全路径名
-
expresseionType : 表达式类型,可取值TAG、SQL92
-
compiledExpression:编译后的表达式对象
-
bornTime: ConsumerFilterData 对象创建创建时间
-
deadTime: ConsumerFilterData 对象死亡时间,默认0,表示一直有效。
-
BloomFilterData bloomFilterData
-
clientVersion:客户端版本
接下来我们先重点分析 ConsumerFilterManager#build方法: