跳到主要内容

十三、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方法: