[ 
https://issues.apache.org/jira/browse/ROCKETMQ-121?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15948855#comment-15948855
 ] 

ASF GitHub Bot commented on ROCKETMQ-121:
-----------------------------------------

Github user vongosling commented on a diff in the pull request:

    https://github.com/apache/incubator-rocketmq/pull/82#discussion_r108884189
  
    --- Diff: 
broker/src/main/java/org/apache/rocketmq/broker/filter/ConsumerFilterData.java 
---
    @@ -0,0 +1,180 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + *
    + *     http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +package org.apache.rocketmq.broker.filter;
    +
    +import org.apache.rocketmq.filter.expression.Expression;
    +import org.apache.rocketmq.filter.util.BloomFilterData;
    +
    +/**
    + * Filter data of consumer.
    + */
    +public class ConsumerFilterData {
    +
    +    private String consumerGroup;
    +    private String topic;
    +    private String expression;
    +    private String expressionType;
    +    private transient Expression compiledExpression;
    +    private long bornTime;
    +    private long deadTime = 0;
    +    private BloomFilterData bloomFilterData;
    +    private long clientVersion;
    +
    +    public boolean isDead() {
    +        return this.deadTime >= this.bornTime;
    +    }
    +
    +    public long deadHowLong() {
    +        if (isDead()) {
    +            return System.currentTimeMillis() - getDeadTime();
    +        }
    +        return -1;
    +    }
    +
    +    /**
    +     * Check this filter data has been used to calculate bit map when msg 
was stored in server.
    +     *
    +     * @param msgStoreTime
    +     * @return
    +     */
    +    public boolean isMsgInLive(long msgStoreTime) {
    +        return msgStoreTime > getBornTime();
    +    }
    +
    +    public String getConsumerGroup() {
    +        return consumerGroup;
    +    }
    +
    +    public void setConsumerGroup(final String consumerGroup) {
    +        this.consumerGroup = consumerGroup;
    +    }
    +
    +    public String getTopic() {
    +        return topic;
    +    }
    +
    +    public void setTopic(final String topic) {
    +        this.topic = topic;
    +    }
    +
    +    public String getExpression() {
    +        return expression;
    +    }
    +
    +    public void setExpression(final String expression) {
    +        this.expression = expression;
    +    }
    +
    +    public String getExpressionType() {
    +        return expressionType;
    +    }
    +
    +    public void setExpressionType(final String expressionType) {
    +        this.expressionType = expressionType;
    +    }
    +
    +    public Expression getCompiledExpression() {
    +        return compiledExpression;
    +    }
    +
    +    public void setCompiledExpression(final Expression compiledExpression) 
{
    +        this.compiledExpression = compiledExpression;
    +    }
    +
    +    public long getBornTime() {
    +        return bornTime;
    +    }
    +
    +    public void setBornTime(final long bornTime) {
    +        this.bornTime = bornTime;
    +    }
    +
    +    public long getDeadTime() {
    +        return deadTime;
    +    }
    +
    +    public void setDeadTime(final long deadTime) {
    +        this.deadTime = deadTime;
    +    }
    +
    +    public BloomFilterData getBloomFilterData() {
    +        return bloomFilterData;
    +    }
    +
    +    public void setBloomFilterData(final BloomFilterData bloomFilterData) {
    +        this.bloomFilterData = bloomFilterData;
    +    }
    +
    +    public long getClientVersion() {
    +        return clientVersion;
    +    }
    +
    +    public void setClientVersion(long clientVersion) {
    +        this.clientVersion = clientVersion;
    +    }
    +
    +    @Override
    +    public boolean equals(Object o) {
    --- End diff --
    
    Could we use ToStringBuilder in Commons Lang3 to build equal and hash 
override method?


> Support message filtering based on SQL92
> ----------------------------------------
>
>                 Key: ROCKETMQ-121
>                 URL: https://issues.apache.org/jira/browse/ROCKETMQ-121
>             Project: Apache RocketMQ
>          Issue Type: Wish
>          Components: rocketmq-client, rocketmq-store
>            Reporter: yukon
>            Assignee: vongosling
>            Priority: Minor
>
> So far, RocketMQ only support message filtering feature by `TAG`, but one 
> message only can own one tag, this is too limited to meet complex business 
> requirements.
> So, we want to define and implement a reasonable filter language based on a 
> subset of the SQL 92 expression syntax to support customized message 
> filtering.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to