客户端请求
postSubscriptionWhenPull为true时,client在拉取时每次都会传递subscription,broker会以client传递的为准
但是postSubscriptionWhenPull默认为false,所以tag 或者sql过滤时client没传subscription,broker会从本地取

classFilter时client从filter Server拉取消息


broker端处理
接上,默认postSubscriptionWhenPull为false,tag 或者sql过滤时,hasSubscriptionFlag都为false



拉取消息时先过滤

tag过滤
org.apache.rocketmq.broker.filter.ExpressionMessageFilter#isMatchedByConsumeQueue
public boolean isMatchedByConsumeQueue(Long tagsCode, ConsumeQueueExt.CqExtUnit cqExtUnit) {
if (null == subscriptionData) {
return true;
}
//clssFilter的不在这里过滤,都返回true
if (subscriptionData.isClassFilterMode()) {
return true;
}
// by tags code.
if (ExpressionType.isTagType(subscriptionData.getExpressionType())) {
if (tagsCode == null) {
return true;
}
if (subscriptionData.getSubString().equals(SubscriptionData.SUB_ALL)) {

最低0.47元/天 解锁文章
363

被折叠的 条评论
为什么被折叠?



