http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/3ee8692b/content/rocketmq/filter-messages-by-sql92-in-rocketmq/index.html
----------------------------------------------------------------------
diff --git a/content/rocketmq/filter-messages-by-sql92-in-rocketmq/index.html 
b/content/rocketmq/filter-messages-by-sql92-in-rocketmq/index.html
new file mode 100644
index 0000000..1453167
--- /dev/null
+++ b/content/rocketmq/filter-messages-by-sql92-in-rocketmq/index.html
@@ -0,0 +1,622 @@
+<!doctype html>
+<html lang="en" class="no-js">
+  <head>
+    <meta charset="utf-8">
+
+<!-- begin SEO -->
+
+
+
+
+
+
+
+
+
+<title>Filter Messages By SQL92 In RocketMQ - Apache RocketMQ</title>
+
+
+
+
+<meta name="description" content="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.">
+
+
+
+
+<meta property="og:locale" content="en">
+<meta property="og:site_name" content="Apache RocketMQ">
+<meta property="og:title" content="Filter Messages By SQL92 In RocketMQ">
+
+
+
+
+  <meta property="og:description" content="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.">
+
+
+
+  <meta name="twitter:site" content="@ApacheRocketMQ">
+  <meta name="twitter:title" content="Filter Messages By SQL92 In RocketMQ">
+  <meta name="twitter:description" content="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.">
+  <meta name="twitter:url" content="">
+
+  
+    <meta name="twitter:card" content="summary">
+    
+  
+
+  
+
+
+
+  
+
+  
+
+
+
+
+
+  <meta property="og:type" content="article">
+  <meta property="article:published_time" content="2017-04-26T00:00:00+08:00">
+
+
+
+
+
+
+
+
+  <script type="application/ld+json">
+    {
+      "@context" : "http://schema.org";,
+      "@type" : "Person",
+      "name" : "Apache RocketMQ",
+      "url" : null,
+      "sameAs" : null
+    }
+  </script>
+
+
+
+  <meta name="google-site-verification" 
content="aand0XZkSGsziuC-UPD4ZJniFD0m0JhGx6820y2mAQY" />
+
+
+  <meta name="baidu-site-verification" content="wD06EbDRkQ" />
+
+
+
+
+<!-- end SEO -->
+
+
+<link href="/feed.xml" type="application/atom+xml" rel="alternate" 
title="Apache RocketMQ Feed">
+
+<!-- http://t.co/dKP3o1e -->
+<meta name="HandheldFriendly" content="True">
+<meta name="MobileOptimized" content="320">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+<script>
+  document.documentElement.className = 
document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
+</script>
+
+<!-- For all browsers -->
+<link rel="stylesheet" href="/assets/css/main.css">
+
+<meta http-equiv="cleartype" content="on">
+    <!-- start custom head snippets -->
+
+<!-- insert favicons. use http://realfavicongenerator.net/ -->
+
+<!-- end custom head snippets -->
+  </head>
+
+  <body class="layout--single">
+
+    <!--[if lt IE 9]>
+<div class="notice--danger align-center" style="margin: 0;">You are using an 
<strong>outdated</strong> browser. Please <a 
href="http://browsehappy.com/";>upgrade your browser</a> to improve your 
experience.</div>
+<![endif]-->
+    <div class="masthead">
+  <div class="masthead__inner-wrap">
+    <div class="masthead__menu">
+      <nav id="site-nav" class="greedy-nav">
+        <button><div class="navicon"></div></button>
+        <ul class="visible-links">
+          <li class="masthead__menu-item masthead__menu-item--lg"><a 
href="/">Apache RocketMQ</a></li>
+          
+            
+            <li class="masthead__menu-item"><a 
href="/docs/quick-start/">Documentation</a></li>
+          
+            
+            <li class="masthead__menu-item"><a 
href="/year-archive/">Blog</a></li>
+          
+            
+            <li class="masthead__menu-item"><a 
href="/community/">Community</a></li>
+          
+            
+            <li class="masthead__menu-item"><a 
href="/customer/">Customer</a></li>
+          
+            
+            <li class="masthead__menu-item"><a 
href="/about/team/">About</a></li>
+          
+        </ul>
+        <ul class="hidden-links hidden"></ul>
+      </nav>
+    </div>
+  </div>
+</div>
+
+    
+
+
+
+<div id="main" role="main">
+  
+  <div class="sidebar sticky">
+  
+
+<div itemscope itemtype="http://schema.org/Person";>
+
+  
+    <div class="author__avatar">
+      
+        <img src="/assets/images/rmq-logo.png" class="author__avatar" alt="" 
itemprop="image">
+      
+    </div>
+  
+
+  <div class="author__content">
+    <h3 class="author__name" itemprop="name"></h3>
+    
+      <p class="author__bio" itemprop="description">
+        A fast, low latency, reliable, scalable, distributed MOM.
+      </p>
+    
+  </div>
+
+  <div class="author__urls-wrapper">
+    <button class="btn btn--inverse">Follow</button>
+    <ul class="author__urls social-icons">
+      
+        <li itemprop="homeLocation" itemscope 
itemtype="http://schema.org/Place";>
+          <i class="fa fa-fw fa-map-marker" aria-hidden="true"></i> <span 
itemprop="name">Hangzhou, China</span>
+        </li>
+      
+
+      
+        <li>
+          <a href="http://incubator.staging.apache.org/projects/rocketmq.html"; 
itemprop="url">
+            <i class="fa fa-fw fa-chain" aria-hidden="true"></i> Website
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="mailto:[email protected]";>
+            <meta itemprop="email" 
content="[email protected]" />
+            <i class="fa fa-fw fa-envelope-square" aria-hidden="true"></i> 
Email
+          </a>
+        </li>
+      
+
+      
+
+      
+        <li>
+          <a href="https://twitter.com/ApacheRocketMQ"; itemprop="sameAs">
+            <i class="fa fa-fw fa-twitter-square" aria-hidden="true"></i> 
Twitter
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+        <li>
+          <a href="https://github.com/apache/incubator-rocketmq"; 
itemprop="sameAs">
+            <i class="fa fa-fw fa-github" aria-hidden="true"></i> GitHub
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="https://www.stackoverflow.com/questions/tagged/rocketmq"; 
itemprop="sameAs">
+            <i class="fa fa-fw fa-stack-overflow" aria-hidden="true"></i> 
Stackoverflow
+          </a>
+        </li>
+      
+
+      
+        <li>
+          <a href="https://www.quora.com/topic/RocketMQ"; itemprop="sameAs">
+            <i class="fa fa-fw" aria-hidden="true"><strong>Q</strong></i> Quora
+          </a>
+        </li>
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      
+
+      <!--
+  <li>
+    <a href="http://link-to-whatever-social-network.com/user/"; 
itemprop="sameAs">
+      <i class="fa fa-fw" aria-hidden="true"></i> Custom Social Profile Link
+    </a>
+  </li>
+-->
+    </ul>
+  </div>
+</div>
+
+  
+  </div>
+
+
+  <article class="page" itemscope itemtype="http://schema.org/CreativeWork";>
+    <meta itemprop="headline" content="Filter Messages By SQL92 In RocketMQ">
+    <meta itemprop="description" content="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.">
+    <meta itemprop="datePublished" content="April 26, 2017">
+    
+
+    <div class="page__inner-wrap">
+      
+        <header>
+          <h1 class="page__title" itemprop="headline">Filter Messages By SQL92 
In RocketMQ
+</h1>
+          
+            <p class="page__meta"><i class="fa fa-clock-o" 
aria-hidden="true"></i> 
+
+
+
+
+  3 minute read
+</p>
+          
+        </header>
+      
+
+      <section class="page__content" itemprop="text">
+        <p>So far, RocketMQ only support message filtering feature by <code 
class="highlighter-rouge">TAG</code>, but one message only can own one tag, 
this is too limited to meet complex business requirements.</p>
+
+<p>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.</p>
+
+<h3 id="why-subset-of-sql92">Why Subset Of SQL92</h3>
+
+<p>Let RocketMQ has the ability of message filtering is the purpose of this 
issue, and as we know, SQL92 is used widely and most persons are familiar with 
it.It’s resonable to select it as RocketMQ’s grammar.</p>
+
+<p>As I know, ActiveMQ already impllement this functionality based on JavaCC, 
it’s simple and exntensible.So I just extract it and integrate into RocketMQ, 
only some grammars:</p>
+
+<ol>
+  <li>Numeric comparison, like <code class="highlighter-rouge">&gt;</code>, 
<code class="highlighter-rouge">&gt;=</code>, <code 
class="highlighter-rouge">&lt;</code>, <code 
class="highlighter-rouge">&lt;=</code>, <code 
class="highlighter-rouge">BETWEEN</code>, <code 
class="highlighter-rouge">=</code>;</li>
+  <li>Character comparison, like <code class="highlighter-rouge">=</code>, 
<code class="highlighter-rouge">&lt;&gt;</code>, <code 
class="highlighter-rouge">IN</code>;</li>
+  <li><code class="highlighter-rouge">IS NULL</code> or <code 
class="highlighter-rouge">IS NOT NULL</code>;</li>
+  <li>Logical <code class="highlighter-rouge">AND</code>, logical <code 
class="highlighter-rouge">OR</code>, logical <code 
class="highlighter-rouge">NOT</code>;</li>
+</ol>
+
+<p>Constant type are:</p>
+
+<ol>
+  <li>Numeric, like 123, 3.1415;</li>
+  <li>Character, like ‘abc’, must be maked with single quotes;</li>
+  <li><code class="highlighter-rouge">NULL</code>, special constant;</li>
+  <li>Boolean, <code class="highlighter-rouge">TRUE</code> or <code 
class="highlighter-rouge">FALSE</code>;</li>
+</ol>
+
+<h3 id="design">Design</h3>
+<ul>
+  <li>Structure</li>
+</ul>
+
+<p><img src="/assets/images/blog/filter_structure_apach.png" alt="screenshot" 
/></p>
+
+<ol>
+  <li>Broker collects the expression of consumer through heartbeat request, 
and saved in <code class="highlighter-rouge">ConsumerFilterManager</code>.</li>
+  <li>When consumer pulls messages, broker will construct a <code 
class="highlighter-rouge">MessageFilter</code>(an interface) with compiled 
expression and subscription data to select matched messages in <code 
class="highlighter-rouge">CommitLog</code>.</li>
+</ol>
+
+<p>The main logic is simple.</p>
+
+<ul>
+  <li>New Module, rocketmq-filter</li>
+</ul>
+
+<p>The implementation of SQL92 language is placed in this module which have 
dependency on common module.</p>
+
+<p>Broker compile or evaluate expression through the interface of <code 
class="highlighter-rouge">FilterSpi</code> contained in <code 
class="highlighter-rouge">FilterFactory</code> that manage all <code 
class="highlighter-rouge">FilterSpi</code> and also support new one to 
register.</p>
+
+<ul>
+  <li>How to manage consumer’s expression data</li>
+</ul>
+
+<p>Different from tag filtering, expression of SQL92 should be compiled first 
to check whether is leagal and then use the complied expression to compute. 
This procedure is designed to take place at broker.</p>
+
+<p><code class="highlighter-rouge">ConsumerManager</code> manage the 
suscriptions of push consumer, and <code 
class="highlighter-rouge">ConsumerFilterManager</code> manage the expression 
info of push consumer who wish to filter message by special language, the info 
includes data version, expression, compiled expression, alive time and etc.</p>
+
+<ul>
+  <li>How to filter message by expression</li>
+</ul>
+
+<p>I redesign the interface <code class="highlighter-rouge">getMessage</code> 
of <code class="highlighter-rouge">MessageStore</code> by replace the last 
parameter <code class="highlighter-rouge">SubscriptionData</code> to <code 
class="highlighter-rouge">MessageFilter</code> that is also refactored. The 
purpose is to make module <code class="highlighter-rouge">rocketmq-store</code> 
has no relation with protocol.</p>
+
+<p>When get message, the implementation <code 
class="highlighter-rouge">ExpressionMessageFilter</code> would check whether 
the message is matched by <code class="highlighter-rouge">BitsArray</code> 
which will be refered later or evaluation, just as the mechanism of tag 
filtering.</p>
+
+<ul>
+  <li>Optimization, pre-calculate the filtering result when build consume 
queue</li>
+</ul>
+
+<p>It’s poor performance to do filter when pull message:</p>
+
+<ol>
+  <li>off-heap to heap, once every consumer subscribed same topic pull 
message.</li>
+  <li>decode message properties, once every consumer subscribed same topic 
pull message.</li>
+</ol>
+
+<p><code class="highlighter-rouge">BloomFilter</code> and pre-calculation are 
adopted to optimize the situation:</p>
+
+<p><img src="/assets/images/blog/filter_build_cq_apache.png" alt="screenshot" 
/></p>
+
+<ol>
+  <li>Every consumer has been asigned some bit position of <code 
class="highlighter-rouge">BloomFilter</code> when register to broker.</li>
+  <li>When broker build queue after message into <code 
class="highlighter-rouge">CommitLog</code>, the consumer’s filtering result 
would be calculated, and all resuls are assembled as a <code 
class="highlighter-rouge">BitsArray</code> saved in <code 
class="highlighter-rouge">ConsumeQueueExt</code>.</li>
+  <li><code class="highlighter-rouge">ConsumeQueueExt</code> is a store file 
linked to <code class="highlighter-rouge">ConsumeQueue</code>, <code 
class="highlighter-rouge">ConsumeQueue</code> could find the data by the <code 
class="highlighter-rouge">tagsCode</code> whitch is already replaced by the 
address(for compitable, the range is Long.MIN_VALUE to Integer.MIN_VALUE) 
generated by <code class="highlighter-rouge">ConsumeQueueExt</code>.</li>
+  <li><code class="highlighter-rouge">ExpressionMessageFilter</code> could use 
the <code class="highlighter-rouge">BitsArray</code> to check whether the 
message is matched. Because of BloomFilter’s collision, it also need to 
decode properties to do calculation for matched message(may could be reduced by 
check the collision, not include in this edition).</li>
+</ol>
+
+<p>This optimization is suitable for:</p>
+
+<ol>
+  <li>High subscription ratio.</li>
+  <li>Large properties.</li>
+</ol>
+
+<p>This optimization is off default, it need set some configs when broker 
starting to switch on:</p>
+
+<ol>
+  <li>enableCalcFilterBitMap = true, means to caculate bitmap when build 
consume queue.</li>
+  <li>expectConsumerNumUseFilter = XX(Integer, default is 32), means estimated 
consumer num subscribe same topic.</li>
+  <li>maxErrorRateOfBloomFilter = XX(1~100, default is 20), means error rate 
of bloom filter.</li>
+  <li>enableConsumeQueueExt = true, means construct consume queue extend 
file.</li>
+</ol>
+
+<h3 id="interface">Interface</h3>
+
+<p>Only push consumer could filter message by SQL92 expression in this 
edition, the interface is:</p>
+
+<p><code class="highlighter-rouge">public void subscribe(final String topic, 
final MessageSelector messageSelector)</code></p>
+
+<h3 id="performance-comparison">Performance Comparison</h3>
+
+<p>Configuration of broker machine: 32 core, 128G memory, 1000Mb/s full duplex 
dual network</p>
+
+<p>Producer send message with 1k body and 1k properties.</p>
+
+<p>Five consumers consume message through push model, every consumer would get 
1/5 messages of total.</p>
+
+<p>Cpu and gc frequency is about 30% lower when do pre-calculate filtering 
result.</p>
+
+        
+      </section>
+
+      <footer class="page__meta">
+        
+        
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-tags" aria-hidden="true"></i> Tags: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/tags/#filter" class="page__taxonomy-item" 
rel="tag">Filter</a><span class="sep">, </span>
+    
+      
+      
+      <a href="/tags/#rocketmq" class="page__taxonomy-item" 
rel="tag">RocketMQ</a>
+    
+    </span>
+  </p>
+
+
+
+
+  
+
+
+  
+  
+  
+
+  <p class="page__taxonomy">
+    <strong><i class="fa fa-fw fa-folder-open" aria-hidden="true"></i> 
Categories: </strong>
+    <span itemprop="keywords">
+    
+      
+      
+      <a href="/categories/#rocketmq" class="page__taxonomy-item" 
rel="tag">RocketMQ</a>
+    
+    </span>
+  </p>
+
+
+        
+          <p class="page__date"><strong><i class="fa fa-fw fa-calendar" 
aria-hidden="true"></i> Updated:</strong> <time 
datetime="2017-04-26T00:00:00+08:00">April 26, 2017</time></p>
+        
+      </footer>
+
+      <section class="page__share">
+  
+    <h4 class="page__share-title">Share on</h4>
+  
+
+  <a href="https://twitter.com/intent/tweet?via=ApacheRocketMQ&text=Filter 
Messages By SQL92 In RocketMQ /rocketmq/filter-messages-by-sql92-in-rocketmq/" 
class="btn btn--twitter" title="Share on Twitter"><i class="fa fa-fw 
fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
+
+  <a 
href="https://www.facebook.com/sharer/sharer.php?u=/rocketmq/filter-messages-by-sql92-in-rocketmq/";
 class="btn btn--facebook" title="Share on Facebook"><i class="fa fa-fw 
fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
+
+  <a 
href="https://plus.google.com/share?url=/rocketmq/filter-messages-by-sql92-in-rocketmq/";
 class="btn btn--google-plus" title="Share on Google Plus"><i class="fa fa-fw 
fa-google-plus" aria-hidden="true"></i><span> Google+</span></a>
+
+  <a 
href="https://www.linkedin.com/shareArticle?mini=true&url=/rocketmq/filter-messages-by-sql92-in-rocketmq/";
 class="btn btn--linkedin" title="Share on LinkedIn"><i class="fa fa-fw 
fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
+</section>
+
+
+      
+  <nav class="pagination">
+    
+      <a href="/activity/launch-rocketmq-code-marathon/" 
class="pagination--pager" title="Launch The Second RocketMQ Code Marathon
+">Previous</a>
+    
+    
+      <a href="#" class="pagination--pager disabled">Next</a>
+    
+  </nav>
+
+    </div>
+
+    
+      <div class="page__comments">
+  
+  
+    <h4 class="page__comments-title">Leave a Comment</h4>
+    <section id="disqus_thread"></section>
+  
+</div>
+    
+  </article>
+
+  
+  
+</div>
+
+    <div class="page__footer">
+      <footer>
+        <!-- start custom footer snippets -->
+
+<!-- end custom footer snippets -->
+        <style type="text/css">
+  div.columns   { float: left; margin-left: 10px;}
+  div.clear     { clear: both; } 
+</style>
+<div>
+  <div class="columns">
+    <a href="https://www.apache.org/";><img 
src="/assets/images/feather-small.gif" alt="Apache Software Foundation" 
style="height: 88px !important" /></a>
+  </div>
+  <div class="columns" style="width: 80%">
+    <div class="page__footer-follow">
+      <ul class="social-icons">
+        
+          <li><strong>Follow:</strong></li>
+        
+        
+          <li><a href="https://twitter.com/ApacheRocketMQ";><i class="fa fa-fw 
fa-twitter-square" aria-hidden="true"></i> Twitter</a></li>
+        
+        
+        
+          <li><a href="http://github.com/apache/incubator-rocketmq";><i 
class="fa fa-fw fa-github" aria-hidden="true"></i> GitHub</a></li>
+        
+        
+        <li><a href="/feed.xml"><i class="fa fa-fw fa-rss-square" 
aria-hidden="true"></i> Feed</a></li>
+      </ul>
+    </div>
+
+    <div class="page__footer-copyright">Copyright &copy; 2017 <a 
href="http://www.apache.org/";>The Apache Software Foundation</a>. All Rights 
Reserved.</div>
+  </div>
+</div>
+<div class="clear"></div>
+      </footer>
+    </div>
+
+    <script src="/assets/js/main.min.js"></script>
+
+
+
+
+  <script>
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new 
Date();a=s.createElement(o),
+  
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+  ga('create', 'UA-89603173-1', 'auto');
+  ga('send', 'pageview');
+</script>
+
+<script>
+var _hmt = _hmt || [];
+(function() {
+  var hm = document.createElement("script");
+  hm.src = "https://hm.baidu.com/hm.js?36428f2b841d08e7405724cbf7f860d2";;
+  var s = document.getElementsByTagName("script")[0]; 
+  s.parentNode.insertBefore(hm, s);
+})();
+</script>
+
+
+
+
+  
+  <script type="text/javascript">
+       /* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * 
* */
+       var disqus_shortname = 'rocketmq';
+
+       /* * * DON'T EDIT BELOW THIS LINE * * */
+       (function() {
+               var dsq = document.createElement('script'); dsq.type = 
'text/javascript'; dsq.async = true;
+               dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
+               (document.getElementsByTagName('head')[0] || 
document.getElementsByTagName('body')[0]).appendChild(dsq);
+       })();
+
+       /* * * DON'T EDIT BELOW THIS LINE * * */
+       (function () {
+               var s = document.createElement('script'); s.async = true;
+               s.type = 'text/javascript';
+               s.src = '//' + disqus_shortname + '.disqus.com/count.js';
+               (document.getElementsByTagName('HEAD')[0] || 
document.getElementsByTagName('BODY')[0]).appendChild(s);
+       }());
+  </script>
+  <noscript>Please enable JavaScript to view the <a 
href="http://disqus.com/?ref_noscript";>comments powered by 
Disqus.</a></noscript>
+
+
+
+
+
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/3ee8692b/content/sitemap.xml
----------------------------------------------------------------------
diff --git a/content/sitemap.xml b/content/sitemap.xml
index 967ec82..17e34d8 100644
--- a/content/sitemap.xml
+++ b/content/sitemap.xml
@@ -1,6 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"; 
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9";>
 <url>
+<loc>/rocketmq/filter-messages-by-sql92-in-rocketmq/</loc>
+<lastmod>2017-04-26T00:00:00+08:00</lastmod>
+</url>
+<url>
 <loc>/activity/launch-rocketmq-code-marathon/</loc>
 <lastmod>2017-03-31T00:00:00+08:00</lastmod>
 </url>
@@ -95,6 +99,9 @@
 <loc>/docs/simple-example/</loc>
 </url>
 <url>
+<loc>/docs/filter-by-sql92-example/</loc>
+</url>
+<url>
 <loc>/about/</loc>
 </url>
 <url>
@@ -200,6 +207,9 @@
 <loc>/docs/simple-example/</loc>
 </url>
 <url>
+<loc>/docs/filter-by-sql92-example/</loc>
+</url>
+<url>
 <loc>/docs/best-practice-broker/</loc>
 </url>
 <url>
@@ -213,10 +223,10 @@
 </url>
 <url>
 <loc>/assets/attachment/launch-rocketmq-code-marathon.pdf</loc>
-<lastmod>2017-01-09T17:53:23+08:00</lastmod>
+<lastmod>2017-03-16T18:55:20+08:00</lastmod>
 </url>
 <url>
 <loc>/assets/attachment/launch-second-rocketmq-code-marathon.pdf</loc>
-<lastmod>2017-04-25T01:00:49+08:00</lastmod>
+<lastmod>2017-04-26T16:48:16+08:00</lastmod>
 </url>
 </urlset>

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/3ee8692b/content/tags/index.html
----------------------------------------------------------------------
diff --git a/content/tags/index.html b/content/tags/index.html
index 0d095b4..648071e 100644
--- a/content/tags/index.html
+++ b/content/tags/index.html
@@ -381,6 +381,16 @@
 <!-- If not equal to previous then it must be unique as sorted -->
 
 
+<!-- Push to group_names -->
+
+
+
+
+
+
+<!-- If not equal to previous then it must be unique as sorted -->
+
+
 
 
 
@@ -469,6 +479,12 @@
 <!-- If not equal to previous then it must be unique as sorted -->
 
 
+
+
+
+<!-- If not equal to previous then it must be unique as sorted -->
+
+
 <!-- Push to group_names -->
 
 
@@ -592,6 +608,14 @@
 
 
 
+<!-- Collect if contains -->
+
+
+
+<!-- Push to group_items -->
+
+
+
 
   
   <h2 id="activity" class="archive__subtitle">Activity</h2>
@@ -782,6 +806,36 @@ January 5th 2017
   
 
   
+  <h2 id="filter" class="archive__subtitle">Filter</h2>
+  
+    
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope 
itemtype="http://schema.org/CreativeWork";>
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
+        <a href="/rocketmq/filter-messages-by-sql92-in-rocketmq/" 
rel="permalink">Filter Messages By SQL92 In RocketMQ
+</a>
+      
+    </h2>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  3 minute read
+</p>
+    
+    <p class="archive__item-excerpt" itemprop="description">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 requiremen...</p>
+  </article>
+</div>
+  
+
+  
   <h2 id="java" class="archive__subtitle">Java</h2>
   
     
@@ -1074,6 +1128,32 @@ and fulfill much of this responsibility through 
managing...</p>
     
     <h2 class="archive__item-title" itemprop="headline">
       
+        <a href="/rocketmq/filter-messages-by-sql92-in-rocketmq/" 
rel="permalink">Filter Messages By SQL92 In RocketMQ
+</a>
+      
+    </h2>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  3 minute read
+</p>
+    
+    <p class="archive__item-excerpt" itemprop="description">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 requiremen...</p>
+  </article>
+</div>
+  
+    
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope 
itemtype="http://schema.org/CreativeWork";>
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
         <a href="/rocketmq/four-methods-to-feed-name-server-address-list/" 
rel="permalink">Four Methods to Feed Name Server Address List
 </a>
       

http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/3ee8692b/content/year-archive/index.html
----------------------------------------------------------------------
diff --git a/content/year-archive/index.html b/content/year-archive/index.html
index d4c8d92..43bd791 100644
--- a/content/year-archive/index.html
+++ b/content/year-archive/index.html
@@ -300,6 +300,34 @@
     
     <h2 class="archive__item-title" itemprop="headline">
       
+        <a href="/rocketmq/filter-messages-by-sql92-in-rocketmq/" 
rel="permalink">Filter Messages By SQL92 In RocketMQ
+</a>
+      
+    </h2>
+    
+      <p class="page__meta"><i class="fa fa-clock-o" aria-hidden="true"></i> 
+
+
+
+
+  3 minute read
+</p>
+    
+    <p class="archive__item-excerpt" itemprop="description">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 requiremen...</p>
+  </article>
+</div>
+
+  
+  
+  
+
+
+
+<div class="list__item">
+  <article class="archive__item" itemscope 
itemtype="http://schema.org/CreativeWork";>
+    
+    <h2 class="archive__item-title" itemprop="headline">
+      
         <a href="/activity/launch-rocketmq-code-marathon/" 
rel="permalink">Launch The Second RocketMQ Code Marathon
 </a>
       

Reply via email to