http://git-wip-us.apache.org/repos/asf/incubator-rocketmq-site/blob/ac7796b8/content/docs/core-concept/index.html ---------------------------------------------------------------------- diff --cc content/docs/core-concept/index.html index 2df252b,0000000..3144309 mode 100644,000000..100644 --- a/content/docs/core-concept/index.html +++ b/content/docs/core-concept/index.html @@@ -1,656 -1,0 +1,716 @@@ +<!doctype html> +<html lang="en" class="no-js"> + <head> + <meta charset="utf-8"> + +<!-- begin SEO --> + + + + + + + + + +<title>Core Concept - Apache RocketMQ</title> + + + + +<meta name="description" content=""> + + + + +<meta property="og:locale" content="en"> +<meta property="og:site_name" content="Apache RocketMQ"> +<meta property="og:title" content="Core Concept"> + + + + + <meta property="og:description" content=""> + + + + <meta name="twitter:site" content="@ApacheRocketMQ"> + <meta name="twitter:title" content="Core Concept"> + <meta name="twitter:description" content=""> + <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-07T09:16:21+08:00"> ++ <meta property="article:published_time" content="2017-04-25T01:02:11+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"> + + + + + + + + + + +<nav class="nav__list"> + + <input id="ac-toc" name="accordion-toc" type="checkbox" /> + <label for="ac-toc">Toggle Menu</label> + <ul class="nav__items"> + + <li> + + <span class="nav__sub-title">User Guide</span> + + + + <ul> + + + + + + + + <li><a href="/docs/quick-start/" class="">Quick Start</a></li> + + + + + + + - <li><a href="/docs/motivation/" class="">Motivation</a></li> ++ <li><a href="/docs/motivation/" class="">Why RocketMQ</a></li> + + + + + + + - <li><a href="/docs/core-concept/" class="active">Core Concept</a></li> ++ <li><a href="/docs/simple-example/" class="">Simple Example</a></li> + + + + + + + - <li><a href="/docs/cli-admin-tool/" class="">CLI Admin Tool</a></li> ++ <li><a href="/docs/order-example/" class="">Order Example</a></li> + + + + + + + - <li><a href="/docs/cluster-deployment/" class="">Cluster Configuration & Deployment</a></li> ++ <li><a href="/docs/broadcast-example/" class="">Broadcasting Example</a></li> ++ ++ ++ ++ ++ ++ ++ ++ <li><a href="/docs/schedule-example/" class="">Schedule Example</a></li> ++ ++ ++ ++ ++ ++ ++ ++ <li><a href="/docs/batch-example/" class="">Batch Example</a></li> + + </ul> + + </li> + + <li> + - <span class="nav__sub-title">Developer Guide</span> ++ <span class="nav__sub-title">Deployment & Operations</span> ++ ++ ++ ++ <ul> ++ ++ ++ ++ ++ ++ ++ ++ <li><a href="/docs/rmq-arc/" class="">Architecture</a></li> ++ ++ ++ ++ ++ ++ ++ ++ <li><a href="/docs/rmq-deployment/" class="">Deployment</a></li> ++ ++ ++ ++ ++ ++ ++ ++ <li><a href="/docs/cli-admin-tool/" class="">CLI Admin Tool</a></li> ++ ++ </ul> ++ ++ </li> ++ ++ <li> ++ ++ <span class="nav__sub-title">Contributor Guide</span> + + + + <ul> + + + + + + + + <li><a href="/docs/code-guidelines/" class="">Code Guidelines</a></li> + + + + + + + - <li><a href="/docs/pull-request/" class="">Best Practice in PR</a></li> ++ <li><a href="/docs/pull-request/" class="">Pull Request</a></li> + + + + + + + + <li><a href="/docs/release-manual" class="">Release Manual</a></li> + + </ul> + + </li> + + <li> + + <span class="nav__sub-title">Best Practice</span> + + + + <ul> + + + + + + + ++ <li><a href="/docs/core-concept/" class="active">Core Concept</a></li> ++ ++ ++ ++ ++ ++ ++ + <li><a href="/docs/best-practice-broker/" class="">Broker</a></li> + + + + + + + + <li><a href="/docs/best-practice-producer/" class="">Producer</a></li> + + + + + + + + <li><a href="/docs/best-practice-consumer/" class="">Consumer</a></li> + + + + + + + + <li><a href="/docs/best-practice-namesvr/" class="">NameServer</a></li> + + </ul> + + </li> + + <li> + + <span class="nav__sub-title">Release Notes</span> + + + + <ul> + + + + + + + + <li><a href="/dowloading/releases/" class="">Download</a></li> + + + + + + + + <li><a href="/release_notes/release-notes-4.0.0-incubating/" class="">4.0.0-incubating</a></li> + + </ul> + + </li> + + <li> + + + + + <a href="/docs/roadmap/"><span class="nav__sub-title">RoadMap</span></a> + + + + </li> + + <li> + + + + + <a href="/docs/faq/"><span class="nav__sub-title">FAQ</span></a> + + + + </li> + + </ul> +</nav> + + + </div> + + + <article class="page" itemscope itemtype="http://schema.org/CreativeWork"> + <meta itemprop="headline" content="Core Concept"> + <meta itemprop="description" content=""> - <meta itemprop="datePublished" content="April 07, 2017"> ++ <meta itemprop="datePublished" content="April 25, 2017"> + <meta itemprop="dateModified" content="December 17, 2016"> + + <div class="page__inner-wrap"> + + <header> + <h1 class="page__title" itemprop="headline">Core Concept +</h1> + + </header> + + + <section class="page__content" itemprop="text"> + <p><img src="/assets/images/rmq-model.png" alt="RocketMQ model" /></p> + +<p>From the above model, we can look deeper into some topics about messaging system design:</p> + +<aside class="sidebar__right"> +<nav class="toc"> + <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> +<ul class="toc__menu" id="markdown-toc"> + <li><a href="#producer" id="markdown-toc-producer">Producer</a> <ul> + <li><a href="#producer-group" id="markdown-toc-producer-group">Producer Group</a></li> + </ul> + </li> + <li><a href="#consumer" id="markdown-toc-consumer">Consumer</a> <ul> + <li><a href="#pullconsumer" id="markdown-toc-pullconsumer">PullConsumer</a></li> + <li><a href="#pushconsumer" id="markdown-toc-pushconsumer">PushConsumer</a></li> + <li><a href="#consumer-group" id="markdown-toc-consumer-group">Consumer Group</a></li> + </ul> + </li> + <li><a href="#topic" id="markdown-toc-topic">Topic</a></li> + <li><a href="#message" id="markdown-toc-message">Message</a> <ul> + <li><a href="#message-queue" id="markdown-toc-message-queue">Message Queue</a></li> + <li><a href="#tag" id="markdown-toc-tag">Tag</a></li> + <li><a href="#broker" id="markdown-toc-broker">Broker</a></li> + </ul> + </li> + <li><a href="#name-server" id="markdown-toc-name-server">Name Server</a></li> + <li><a href="#message-model" id="markdown-toc-message-model">Message Model</a></li> + <li><a href="#message-order" id="markdown-toc-message-order">Message Order</a></li> +</ul> + + </nav> +</aside> + +<ul> + <li>Consumer Concurrency</li> + <li>Consumer Hot Issues</li> + <li>Consumer Load Balance</li> + <li>Message Router</li> + <li>Connection Multiplex</li> + <li>Canary Deployments</li> +</ul> + +<h1 id="producer">Producer</h1> + +<p>A producer sends messages generated by the business application systems to brokers. RocketMQ provides multiple paradigms of sending: synchronous, asynchronous and one-way.</p> + +<h2 id="producer-group">Producer Group</h2> + +<p>Producers of the same role are grouped together. A different producer instance of the same producer group may be contacted by a broker to commit or roll back a transaction in case the original producer crashed after starting the transaction.</p> + +<p><strong>Warning</strong>: Considering the provided producer is sufficiently powerful at sending messages, only one instance is allowed per producer group and process to avoid unnecessarily initializing of producer instances.</p> + +<h1 id="consumer">Consumer</h1> + +<p>A Consumer pulls messages from brokers and feeds them into application. In perspective of user application, two types of consumers are provided:</p> + +<h2 id="pullconsumer">PullConsumer</h2> + +<p>Pull consumer actively pulls messages from brokers. Once batches of messages are pulled, user application initiates consuming process.</p> + +<h2 id="pushconsumer">PushConsumer</h2> + +<p>Push consumer, on the other hand, encapsulates message pulling, consuming progress maintaining and other effortful work inside, leaving a callback interface to end user to implement which will be executed on message arrival.</p> + +<h2 id="consumer-group">Consumer Group</h2> + +<p>Similar to previously mentioned producer group, consumers of the exactly same role are grouped together and named <strong>Consumer Group</strong>.</p> + +<p>Consumer Group is a great concept with which achieving goals of load-balance and fault-tolerance, in terms of message consuming, is super easy.</p> + +<p><strong>Warning</strong>: consumer instances of a consumer group <strong>must</strong> have exactly same topic subscription(s).</p> + +<h1 id="topic">Topic</h1> + +<p>Topic is a category to which producers deliver messages and from which consumers pull messages. Topics have very loose relation with producers and consumers. Specifically, a topic may have zero, one or multiple producers that sends messages to it; conversely, a producer can sends messages of different topics. In consumerâs view, a topic may be subscribed by zero, one or multiple consumer groups; and a consumer group, in the same paradigm, may subscribe one or multiple topics as long as instances of this group keep their subscription consistent as emphasized in the previous section.</p> + +<h1 id="message">Message</h1> + +<p>Message is the envelope of your information to deliver. A message must be specified with a topic, which can be interpreted as address of your letter to mail to. A message may also have an optional tag set. Extra key-value pairs may also be included. For example, you may set a business key for your message and look up the message on broker server to diagnose issues during development.</p> + +<h2 id="message-queue">Message Queue</h2> + +<p>Topic, internally, is logically partitioned into one or more sub-topics. We call these sub-topics âmessage queuesâ. This concept plays a major role in implementing valuable features, including fail-over, maximum concurrency, etc.</p> + +<h2 id="tag">Tag</h2> + +<p>Tag, which can be thought as sub-topic, provides an extra flexibility for user. Through introducing tag, messages with different purposes from the same business module may have the same topic yet different tag. It would be helpful to keep your code clean and coherent.</p> + +<h2 id="broker">Broker</h2> + +<p>Broker is the major role of the RocketMQ system. It receives messages sent from producers, store them and being prepared to serve pull requests from consumers. It also stores message consuming related meta data, including consumer groups, consuming progress offsets and topic / queue info.</p> + +<h1 id="name-server">Name Server</h1> + +<p>Name server serves as the routing information provider. Producer/Consumer clients look up topics to find broker list to read from and write to.</p> + +<h1 id="message-model">Message Model</h1> + +<ul> + <li> + <p>Clustering</p> + </li> + <li> + <p>Broadcasting</p> + </li> +</ul> + +<h1 id="message-order">Message Order</h1> + +<p>When DefaultMQPushConsumer is employed, you may decide to consume messages orderly or concurrently.</p> + +<ul> + <li>Orderly</li> +</ul> + +<p>Consuming messages orderly means messages are consumed the same order they are sent by producers for each message queue. If you are dealing with scenario that global order is mandatory, make sure the topic you use has only one message queue.</p> + +<p><strong>Warn</strong>: If consuming orderly is specified, the maximum concurrency of message consuming is the number of message queues subscribed by the consumer group.</p> + +<ul> + <li>Concurrently</li> +</ul> + +<p>When consuming concurrently, maximum concurrency of message consuming is only limited by thread pool specified for each consumer client.</p> + +<p><strong>Warn</strong>: Message order is no longer guaranteed in this mode.</p> + + + + </section> + + <footer class="page__meta"> + + + + + + <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Updated:</strong> <time datetime="2016-12-17">December 17, 2016</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=Core Concept /docs/core-concept/" 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=/docs/core-concept/" 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=/docs/core-concept/" 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=/docs/core-concept/" 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="/docs/motivation/" class="pagination--pager" title="Motivation +">Previous</a> + + + <a href="/docs/cli-admin-tool/" class="pagination--pager" title="CLI Admin Tool +">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 © 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/ac7796b8/content/docs/documentation/index.html ---------------------------------------------------------------------- diff --cc content/docs/documentation/index.html index 4f326cb,0000000..9c9720b mode 100644,000000..100644 --- a/content/docs/documentation/index.html +++ b/content/docs/documentation/index.html @@@ -1,590 -1,0 +1,650 @@@ +<!doctype html> +<html lang="en" class="no-js"> + <head> + <meta charset="utf-8"> + +<!-- begin SEO --> + + + + + + + + + +<title>Documentation - Apache RocketMQ</title> + + + + +<meta name="description" content="Apache RocketMQ Documentation"> + + + + +<meta property="og:locale" content="en"> +<meta property="og:site_name" content="Apache RocketMQ"> +<meta property="og:title" content="Documentation"> + + + + + <meta property="og:description" content="Apache RocketMQ Documentation"> + + + + <meta name="twitter:site" content="@ApacheRocketMQ"> + <meta name="twitter:title" content="Documentation"> + <meta name="twitter:description" content="Apache RocketMQ Documentation"> + <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-07T09:16:21+08:00"> ++ <meta property="article:published_time" content="2017-04-25T01:02:11+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"> + + + + + + + + + + +<nav class="nav__list"> + + <input id="ac-toc" name="accordion-toc" type="checkbox" /> + <label for="ac-toc">Toggle Menu</label> + <ul class="nav__items"> + + <li> + + <span class="nav__sub-title">User Guide</span> + + + + <ul> + + + + + + + + <li><a href="/docs/quick-start/" class="">Quick Start</a></li> + + + + + + + - <li><a href="/docs/motivation/" class="">Motivation</a></li> ++ <li><a href="/docs/motivation/" class="">Why RocketMQ</a></li> + + + + + + + - <li><a href="/docs/core-concept/" class="">Core Concept</a></li> ++ <li><a href="/docs/simple-example/" class="">Simple Example</a></li> + + + + + + + - <li><a href="/docs/cli-admin-tool/" class="">CLI Admin Tool</a></li> ++ <li><a href="/docs/order-example/" class="">Order Example</a></li> + + + + + + + - <li><a href="/docs/cluster-deployment/" class="">Cluster Configuration & Deployment</a></li> ++ <li><a href="/docs/broadcast-example/" class="">Broadcasting Example</a></li> ++ ++ ++ ++ ++ ++ ++ ++ <li><a href="/docs/schedule-example/" class="">Schedule Example</a></li> ++ ++ ++ ++ ++ ++ ++ ++ <li><a href="/docs/batch-example/" class="">Batch Example</a></li> + + </ul> + + </li> + + <li> + - <span class="nav__sub-title">Developer Guide</span> ++ <span class="nav__sub-title">Deployment & Operations</span> ++ ++ ++ ++ <ul> ++ ++ ++ ++ ++ ++ ++ ++ <li><a href="/docs/rmq-arc/" class="">Architecture</a></li> ++ ++ ++ ++ ++ ++ ++ ++ <li><a href="/docs/rmq-deployment/" class="">Deployment</a></li> ++ ++ ++ ++ ++ ++ ++ ++ <li><a href="/docs/cli-admin-tool/" class="">CLI Admin Tool</a></li> ++ ++ </ul> ++ ++ </li> ++ ++ <li> ++ ++ <span class="nav__sub-title">Contributor Guide</span> + + + + <ul> + + + + + + + + <li><a href="/docs/code-guidelines/" class="">Code Guidelines</a></li> + + + + + + + - <li><a href="/docs/pull-request/" class="">Best Practice in PR</a></li> ++ <li><a href="/docs/pull-request/" class="">Pull Request</a></li> + + + + + + + + <li><a href="/docs/release-manual" class="">Release Manual</a></li> + + </ul> + + </li> + + <li> + + <span class="nav__sub-title">Best Practice</span> + + + + <ul> + + + + + + + ++ <li><a href="/docs/core-concept/" class="">Core Concept</a></li> ++ ++ ++ ++ ++ ++ ++ + <li><a href="/docs/best-practice-broker/" class="">Broker</a></li> + + + + + + + + <li><a href="/docs/best-practice-producer/" class="">Producer</a></li> + + + + + + + + <li><a href="/docs/best-practice-consumer/" class="">Consumer</a></li> + + + + + + + + <li><a href="/docs/best-practice-namesvr/" class="">NameServer</a></li> + + </ul> + + </li> + + <li> + + <span class="nav__sub-title">Release Notes</span> + + + + <ul> + + + + + + + + <li><a href="/dowloading/releases/" class="">Download</a></li> + + + + + + + + <li><a href="/release_notes/release-notes-4.0.0-incubating/" class="">4.0.0-incubating</a></li> + + </ul> + + </li> + + <li> + + + + + <a href="/docs/roadmap/"><span class="nav__sub-title">RoadMap</span></a> + + + + </li> + + <li> + + + + + <a href="/docs/faq/"><span class="nav__sub-title">FAQ</span></a> + + + + </li> + + </ul> +</nav> + + + </div> + + + <article class="page" itemscope itemtype="http://schema.org/CreativeWork"> + <meta itemprop="headline" content="Documentation"> + <meta itemprop="description" content="Apache RocketMQ Documentation"> - <meta itemprop="datePublished" content="April 07, 2017"> ++ <meta itemprop="datePublished" content="April 25, 2017"> + <meta itemprop="dateModified" content="March 02, 2017"> + + <div class="page__inner-wrap"> + + <header> + <h1 class="page__title" itemprop="headline">Documentation +</h1> + + </header> + + + <section class="page__content" itemprop="text"> + <aside class="sidebar__right"> +<nav class="toc"> + <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> +<ul class="toc__menu" id="markdown-toc"> + <li><a href="#introduction" id="markdown-toc-introduction">Introduction</a> <ul> + <li><a href="#api-documentation" id="markdown-toc-api-documentation">API Documentation</a></li> + <li><a href="#documentation-content" id="markdown-toc-documentation-content">Documentation Content</a></li> + </ul> + </li> +</ul> + + </nav> +</aside> + +<h1 id="introduction">Introduction</h1> + +<p>Quality documentation is critically important to develop and maintain a project. The better the documentation is, the +easier it will be for other participants to understand and respond properly.</p> + +<h2 id="api-documentation">API Documentation</h2> + +<p>The API is documented through javadoc comments.</p> + +<p>All classes, interfaces, methods and field variables should be documented. Public methods, in particular, should be +commented fully â method purpose, return value, parameters and exceptions.</p> + +<p>Below is an example:</p> + +<div class="highlighter-rouge"><pre class="highlight"><code>/** + * Send message in synchronous mode. This method returns only when the sending procedure totally completes. + * </p> + * + * <strong>Warn:</strong> this method has internal retry-mechanism, that is, internal implementation will retry + * {@link #retryTimesWhenSendFailed} times before claiming failure. As a result, multiple messages may potentially + * delivered to broker(s). It's up to the application developers to resolve potential duplication issue. + * + * @param msg Message to send. + * @return {@link SendResult} instance to inform senders details of the deliverable, say Message ID of the message, + * {@link SendStatus} indicating broker storage/replication status, message queue sent to, etc. + * @throws MQClientException if there is any client error. + * @throws RemotingException if there is any network-tier error. + * @throws MQBrokerException if there is any error with broker. + * @throws InterruptedException if the sending thread is interrupted. + */ +@Override +public SendResult send(Message msg) throws MQClientException, RemotingException, MQBrokerException, InterruptedException { + return this.defaultMQProducerImpl.send(msg); +} +</code></pre> +</div> + +<h2 id="documentation-content">Documentation Content</h2> + +<p>Every class and interface should have summary documentation, explaining its general function and purpose. Additionally, +thread safety information should be included. If you are working on a class which represents a core concept, adding sample +usage is always a good practice.</p> + +<p>When writing API documentation, please keep a professional tune: write in active voice, be as descriptive as possible. +Keep in mind that the audience may be a developer who would use RocketMQ for the first time, or a contributor who just gets + involved with the codebase. Either of them is not as familiar with Apache RocketMQ as you are.</p> + + + + </section> + + <footer class="page__meta"> + + + + + + <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Updated:</strong> <time datetime="2017-03-02">March 02, 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=Documentation /docs/documentation/" 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=/docs/documentation/" 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=/docs/documentation/" 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=/docs/documentation/" 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="/docs/code-guidelines/" class="pagination--pager" title="Coding Guidelines +">Previous</a> + + + <a href="/docs/faq/" class="pagination--pager" title="Frequently Asked Questions +">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 © 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/ac7796b8/content/docs/faq/index.html ---------------------------------------------------------------------- diff --cc content/docs/faq/index.html index 9a2afd9,0000000..e748b12 mode 100644,000000..100644 --- a/content/docs/faq/index.html +++ b/content/docs/faq/index.html @@@ -1,630 -1,0 +1,690 @@@ +<!doctype html> +<html lang="en" class="no-js"> + <head> + <meta charset="utf-8"> + +<!-- begin SEO --> + + + + + + + + + +<title>Frequently Asked Questions - Apache RocketMQ</title> + + + + +<meta name="description" content="The following questions are frequently asked with regard to the RocketMQ project in general. If you have further questions, make sure to consult the documentation or ask the community.General1. Why create rocketmq project instead of selecting other products?In some cases, slower consumers can slow down the producers. We tried our best efforts to handle this problems through throttling, circuit breaker or degradation, but it cannot scale out gracefully. So we begin to focus on the popular messaging solution Kafka at that time. Unfortunately, Kafka can not meet our requirements such as low latency and high reliability. So we decided to innovate a new messaging middleware to handle a broad set of use cases, ranging from traditional publish/subscribe scenario to demandingly high volume realtime transaction system that tolerates no message loss."> + + + + +<meta property="og:locale" content="en"> +<meta property="og:site_name" content="Apache RocketMQ"> +<meta property="og:title" content="Frequently Asked Questions"> + + + + + <meta property="og:description" content="The following questions are frequently asked with regard to the RocketMQ project in general. If you have further questions, make sure to consult the documentation or ask the community.General1. Why create rocketmq project instead of selecting other products?In some cases, slower consumers can slow down the producers. We tried our best efforts to handle this problems through throttling, circuit breaker or degradation, but it cannot scale out gracefully. So we begin to focus on the popular messaging solution Kafka at that time. Unfortunately, Kafka can not meet our requirements such as low latency and high reliability. So we decided to innovate a new messaging middleware to handle a broad set of use cases, ranging from traditional publish/subscribe scenario to demandingly high volume realtime transaction system that tolerates no message loss."> + + + + <meta name="twitter:site" content="@ApacheRocketMQ"> + <meta name="twitter:title" content="Frequently Asked Questions"> + <meta name="twitter:description" content="The following questions are frequently asked with regard to the RocketMQ project in general. If you have further questions, make sure to consult the documentation or ask the community.General1. Why create rocketmq project instead of selecting other products?In some cases, slower consumers can slow down the producers. We tried our best efforts to handle this problems through throttling, circuit breaker or degradation, but it cannot scale out gracefully. So we begin to focus on the popular messaging solution Kafka at that time. Unfortunately, Kafka can not meet our requirements such as low latency and high reliability. So we decided to innovate a new messaging middleware to handle a broad set of use cases, ranging from traditional publish/subscribe scenario to demandingly high volume realtime transaction system that tolerates no message loss."> + <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-07T09:16:21+08:00"> ++ <meta property="article:published_time" content="2017-04-25T01:02:11+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"> + + + + + + + + + + +<nav class="nav__list"> + + <input id="ac-toc" name="accordion-toc" type="checkbox" /> + <label for="ac-toc">Toggle Menu</label> + <ul class="nav__items"> + + <li> + + <span class="nav__sub-title">User Guide</span> + + + + <ul> + + + + + + + + <li><a href="/docs/quick-start/" class="">Quick Start</a></li> + + + + + + + - <li><a href="/docs/motivation/" class="">Motivation</a></li> ++ <li><a href="/docs/motivation/" class="">Why RocketMQ</a></li> + + + + + + + - <li><a href="/docs/core-concept/" class="">Core Concept</a></li> ++ <li><a href="/docs/simple-example/" class="">Simple Example</a></li> + + + + + + + - <li><a href="/docs/cli-admin-tool/" class="">CLI Admin Tool</a></li> ++ <li><a href="/docs/order-example/" class="">Order Example</a></li> + + + + + + + - <li><a href="/docs/cluster-deployment/" class="">Cluster Configuration & Deployment</a></li> ++ <li><a href="/docs/broadcast-example/" class="">Broadcasting Example</a></li> ++ ++ ++ ++ ++ ++ ++ ++ <li><a href="/docs/schedule-example/" class="">Schedule Example</a></li> ++ ++ ++ ++ ++ ++ ++ ++ <li><a href="/docs/batch-example/" class="">Batch Example</a></li> + + </ul> + + </li> + + <li> + - <span class="nav__sub-title">Developer Guide</span> ++ <span class="nav__sub-title">Deployment & Operations</span> ++ ++ ++ ++ <ul> ++ ++ ++ ++ ++ ++ ++ ++ <li><a href="/docs/rmq-arc/" class="">Architecture</a></li> ++ ++ ++ ++ ++ ++ ++ ++ <li><a href="/docs/rmq-deployment/" class="">Deployment</a></li> ++ ++ ++ ++ ++ ++ ++ ++ <li><a href="/docs/cli-admin-tool/" class="">CLI Admin Tool</a></li> ++ ++ </ul> ++ ++ </li> ++ ++ <li> ++ ++ <span class="nav__sub-title">Contributor Guide</span> + + + + <ul> + + + + + + + + <li><a href="/docs/code-guidelines/" class="">Code Guidelines</a></li> + + + + + + + - <li><a href="/docs/pull-request/" class="">Best Practice in PR</a></li> ++ <li><a href="/docs/pull-request/" class="">Pull Request</a></li> + + + + + + + + <li><a href="/docs/release-manual" class="">Release Manual</a></li> + + </ul> + + </li> + + <li> + + <span class="nav__sub-title">Best Practice</span> + + + + <ul> + + + + + + + ++ <li><a href="/docs/core-concept/" class="">Core Concept</a></li> ++ ++ ++ ++ ++ ++ ++ + <li><a href="/docs/best-practice-broker/" class="">Broker</a></li> + + + + + + + + <li><a href="/docs/best-practice-producer/" class="">Producer</a></li> + + + + + + + + <li><a href="/docs/best-practice-consumer/" class="">Consumer</a></li> + + + + + + + + <li><a href="/docs/best-practice-namesvr/" class="">NameServer</a></li> + + </ul> + + </li> + + <li> + + <span class="nav__sub-title">Release Notes</span> + + + + <ul> + + + + + + + + <li><a href="/dowloading/releases/" class="">Download</a></li> + + + + + + + + <li><a href="/release_notes/release-notes-4.0.0-incubating/" class="">4.0.0-incubating</a></li> + + </ul> + + </li> + + <li> + + + + + <a href="/docs/roadmap/"><span class="nav__sub-title">RoadMap</span></a> + + + + </li> + + <li> + + + + + <a href="/docs/faq/"><span class="nav__sub-title">FAQ</span></a> + + + + </li> + + </ul> +</nav> + + + </div> + + + <article class="page" itemscope itemtype="http://schema.org/CreativeWork"> + <meta itemprop="headline" content="Frequently Asked Questions"> + <meta itemprop="description" content="The following questions are frequently asked with regard to the RocketMQ project in general. If you have further questions, make sure to consult the documentation or ask the community.General1. Why create rocketmq project instead of selecting other products?In some cases, slower consumers can slow down the producers. We tried our best efforts to handle this problems through throttling, circuit breaker or degradation, but it cannot scale out gracefully. So we begin to focus on the popular messaging solution Kafka at that time. Unfortunately, Kafka can not meet our requirements such as low latency and high reliability. So we decided to innovate a new messaging middleware to handle a broad set of use cases, ranging from traditional publish/subscribe scenario to demandingly high volume realtime transaction system that tolerates no message loss."> - <meta itemprop="datePublished" content="April 07, 2017"> ++ <meta itemprop="datePublished" content="April 25, 2017"> + <meta itemprop="dateModified" content="December 28, 2016"> + + <div class="page__inner-wrap"> + + <header> + <h1 class="page__title" itemprop="headline">Frequently Asked Questions +</h1> + + </header> + + + <section class="page__content" itemprop="text"> + <p>The following questions are frequently asked with regard to the RocketMQ project in general. If you have further questions, make sure to consult the documentation or ask the community.</p> + +<h2 id="general">General</h2> +<h3 id="1-why-create-rocketmq-project-instead-of-selecting-other-products">1. Why create rocketmq project instead of selecting other products?</h3> +<p>In some cases, slower consumers can slow down the producers. We tried our best efforts to handle this problems through throttling, circuit breaker or degradation, but it cannot scale out gracefully. So we begin to focus on the popular messaging solution Kafka at that time. Unfortunately, Kafka can not meet our requirements such as low latency and high reliability. So we decided to innovate a new messaging middleware to handle a broad set of use cases, ranging from traditional publish/subscribe scenario to demandingly high volume realtime transaction system that tolerates no message loss.</p> + +<h3 id="2-do-i-have-to-install-other-softewares-such-as-zookeeper-to-use-rocketmq">2. Do I have to install other softewares, such as zookeeper, to use RocketMQ?</h3> +<p>No. RocketMQ can run without any other softeware, you can run broker server and name server indepentently. Aslo, the topic can be created by using command, such as sh mqadmin updatetopic etc. After creating successfully, you enjoy yourself with RocketMQ.</p> + +<h2 id="usage">Usage</h2> +<h3 id="1-where-does-the-newly-created-consumer-id-start-consuming-messages">1. Where does the newly created Consumer ID start consuming messages?</h3> + +<ol> + <li>If the topic sends a message within three days, then the consumer start consume message from the first message saved in the server.</li> + <li>If the topic sends a message in three days ago, the consumer start consume message from the latest message in the server, in other words, starting to consume the message queue tail.</li> + <li>If such consumer is the second reboot, then start to consumer message from the last consumption location.</li> +</ol> + +<h3 id="2-how-to-reconsume-message-when-consumption-fails">2. How to reconsume message when consumption fails?</h3> +<div class="highlighter-rouge"><pre class="highlight"><code>1.Cluster consumption pattern +The consumer business logic code return Action.ReconsumerLater, or NULL, or throws an exception, the message will go up to 16 times retry procedure, if still fail to retry 16 times, then such message descarded. + +2.Broadcast consumption pattern +The broadcaset consumption still ensures that a message is consumered at least once, but it is consumed fail without retry. +</code></pre> +</div> + +<h3 id="3-how-to-deal-with-consume-message-failed">3. How to deal with consume message failed?</h3> + +<ol> + <li>Use topic query by the time range, you can query to a period of time Topic received all the messages.</li> + <li>Using Topic and Message Id to accurately query the message.</li> + <li>Using Topic and Message Key accurately query a class of messages with the same Message Key.</li> +</ol> + +<h3 id="4-delivery-exactly-once">4. Delivery exactly once?</h3> + +<p>In most cases, the message is not repeated. As a distributed message middleware, in the network jitter, application processing timeout and other abnormal circumstances, can not guarantee that the message is not repeated, but can ensure that the message is not lost.</p> + +<h3 id="5-how-to-add-a-new-broker">5. How to add a new broker?</h3> + +<ol> + <li>Start up a new broker and make it register to the same list of name servers.</li> + <li>On default, only internally system topics and consumer groups are created automatically. If you would like to have your business topic and consumer groups on the new node, remember to replicate them from the existing broker. You may turn to admin tool command to achieve this.</li> +</ol> + +<h2 id="configuration-related">Configuration related</h2> +<h3 id="1-how-long-the-message-is-saved-on-the-server">1. How long the message is saved on the server?</h3> + +<p>Stored messages are saved for up to 3 days, and messages that are not consumed for more than 3 days will be deleted.</p> + +<h3 id="2-what-is-the-length-limit-for-message-body">2. What is the length limit for message Body?</h3> +<p>Generally 256KB, but can be modified by configuration.</p> + +<h3 id="3-how-to-set-the-number-of-consumer-threads">3. How to set the number of consumer threads?</h3> +<p>When you start Consumer, set a ConsumeThreadNums property, example as follow.</p> + +<div class="highlighter-rouge"><pre class="highlight"><code>properties.put(PropertyKeyConst.ConsumeThreadNums,20); +</code></pre> +</div> + +<h2 id="errors">Errors</h2> +<h3 id="1-start-producer-or-consumer-failed-and-producer-group-or-consumer-repeat">1. Start producer or consumer failed and producer group or consumer repeat?</h3> +<p>Reasonï¼In the same JVM inside using the same Producer ID/Consumer ID launched multiple instances of Producer/Consumer, it may cause the client to start failure.</p> + +<p>Solution: Ensure that a JVM corresponds to a Producer ID/Consumer ID starts only with a Producer/Consumer instance.</p> + +<h3 id="2-in-broadcast-mode-consumer-start-loading-json-file-failed">2. In broadcast mode, consumer start loading json file failed?</h3> +<p>Reason: Fastjson version is too low to cause the broadcast consumer to load a local offsets.json file failed, which causing the consumer boot failure.</p> + +<p>Solution: Fastjson version will be upgraded to rocketmq client dependent version, to ensure that the local offsets.json can be normal loading. By default offsets.json file is in /home/{user}/.rocketmq_offsets.</p> + +<h3 id="3-what-if-a-broker-crashes">3. What if a broker crashes?</h3> + +<div class="highlighter-rouge"><pre class="highlight"><code>1. Master crashes + Messages can no longer be sent to this broker set, but if you have another broker set available, messages can be still sent there given the topic is present.Messages can still be consumed from slaves. +2. One slaves crashes + As long as there is another working slave, no impact on writing messages;No impact on consuming messages except when the consumer group is set to consume from this slave preferably. By default, it is from master. +3. All slaves crash + No impact on writing messages on master, but if master is a SYNC_MASTER, the producer will get a result of SLAVE_NOT_AVAILABLE indicating that the message is not replicated to any slaves.No impact on consuming messages except that if the consumer group is set to consume from slave preferably. By default, it is from master. +</code></pre> +</div> + +<h3 id="4-producer-complains-no-topic-route-info-how-to-diagnose">4. Producer complains âNo Topic Route Infoâ, how to diagnose?</h3> +<p>This happens when you are trying to send message to a topic whose route info is not available to the producer.</p> + +<ol> + <li>Confirm the producer can connect to a name server and capable of fetching routing meta info from it.</li> + <li>Confirm that name servers do contain routing meta info of the topic. You may query the routing meta info from name server through topicRoute of admin tools or web console.</li> + <li>Confirm your brokers are sending heartbeats to the same list of name servers your producer is connecting to.</li> + <li>Confirm that the topicâs perm is 6(rw-), or at least 2(-w-).</li> +</ol> + +<p>If you canât find this topic, create it via admin tools command updateTopic or web console on a broker.</p> + +<h2 id="features">Features</h2> +<h3 id="1-what-kind-of-consumption-pattern-does-rocketmq-provide">1. What kind of consumption pattern does RocketMQ provide?</h3> +<p>In RocketMQ, it providers two types of consumption patterns, such as Clustering consumption patterns and broadcasting consumption patterns. See the documentation on cluster patterns for details.</p> + +<h3 id="2-how-many-kinds-of-message-type-are-supported">2. How many kinds of message type are supported?</h3> +<p>There are several types of messages that are currently supported in rocketmqï¼such as common message, timed message, transaction message, sequential message and delay message. User can select the appropriate message type according to the needs of the business.</p> + + + </section> + + <footer class="page__meta"> + + + + + + <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Updated:</strong> <time datetime="2016-12-28">December 28, 2016</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=Frequently Asked Questions /docs/faq/" 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=/docs/faq/" 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=/docs/faq/" 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=/docs/faq/" 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="/docs/documentation/" class="pagination--pager" title="Documentation +">Previous</a> + + + <a href="/docs/release-manual" class="pagination--pager" title="Release Manual +">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 © 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/ac7796b8/content/docs/motivation/index.html ---------------------------------------------------------------------- diff --cc content/docs/motivation/index.html index 15430a0,0000000..43a32bf mode 100644,000000..100644 --- a/content/docs/motivation/index.html +++ b/content/docs/motivation/index.html @@@ -1,619 -1,0 +1,679 @@@ +<!doctype html> +<html lang="en" class="no-js"> + <head> + <meta charset="utf-8"> + +<!-- begin SEO --> + + + + + + + + + +<title>Motivation - Apache RocketMQ</title> + + + + +<meta name="description" content="In the early stages, we constructed our distributed messaging middleware on the basis of ActiveMQ 5.x(less than 5.3). Our international business uses it for async communication, search, social network activity stream, data pipeline, even in our trade order process. As our trade business throughput rises more and more inconceivably, pressure originating from our messaging cluster also become more and more obvious."> + + + + +<meta property="og:locale" content="en"> +<meta property="og:site_name" content="Apache RocketMQ"> +<meta property="og:title" content="Motivation"> + + + + + <meta property="og:description" content="In the early stages, we constructed our distributed messaging middleware on the basis of ActiveMQ 5.x(less than 5.3). Our international business uses it for async communication, search, social network activity stream, data pipeline, even in our trade order process. As our trade business throughput rises more and more inconceivably, pressure originating from our messaging cluster also become more and more obvious."> + + + + <meta name="twitter:site" content="@ApacheRocketMQ"> + <meta name="twitter:title" content="Motivation"> + <meta name="twitter:description" content="In the early stages, we constructed our distributed messaging middleware on the basis of ActiveMQ 5.x(less than 5.3). Our international business uses it for async communication, search, social network activity stream, data pipeline, even in our trade order process. As our trade business throughput rises more and more inconceivably, pressure originating from our messaging cluster also become more and more obvious."> + <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-07T09:16:21+08:00"> ++ <meta property="article:published_time" content="2017-04-25T01:02:11+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"> + + + + + + + + + + +<nav class="nav__list"> + + <input id="ac-toc" name="accordion-toc" type="checkbox" /> + <label for="ac-toc">Toggle Menu</label> + <ul class="nav__items"> + + <li> + + <span class="nav__sub-title">User Guide</span> + + + + <ul> + + + + + + + + <li><a href="/docs/quick-start/" class="">Quick Start</a></li> + + + + + + + - <li><a href="/docs/motivation/" class="active">Motivation</a></li> ++ <li><a href="/docs/motivation/" class="active">Why RocketMQ</a></li> + + + + + + + - <li><a href="/docs/core-concept/" class="">Core Concept</a></li> ++ <li><a href="/docs/simple-example/" class="">Simple Example</a></li> + + + + + + + - <li><a href="/docs/cli-admin-tool/" class="">CLI Admin Tool</a></li> ++ <li><a href="/docs/order-example/" class="">Order Example</a></li> + + + + + + + - <li><a href="/docs/cluster-deployment/" class="">Cluster Configuration & Deployment</a></li> ++ <li><a href="/docs/broadcast-example/" class="">Broadcasting Example</a></li> ++ ++ ++ ++ ++ ++ ++ ++ <li><a href="/docs/schedule-example/" class="">Schedule Example</a></li> ++ ++ ++ ++ ++ ++ ++ ++ <li><a href="/docs/batch-example/" class="">Batch Example</a></li> + + </ul> + + </li> + + <li> + - <span class="nav__sub-title">Developer Guide</span> ++ <span class="nav__sub-title">Deployment & Operations</span> ++ ++ ++ ++ <ul> ++ ++ ++ ++ ++ ++ ++ ++ <li><a href="/docs/rmq-arc/" class="">Architecture</a></li> ++ ++ ++ ++ ++ ++ ++ ++ <li><a href="/docs/rmq-deployment/" class="">Deployment</a></li> ++ ++ ++ ++ ++ ++ ++ ++ <li><a href="/docs/cli-admin-tool/" class="">CLI Admin Tool</a></li> ++ ++ </ul> ++ ++ </li> ++ ++ <li> ++ ++ <span class="nav__sub-title">Contributor Guide</span> + + + + <ul> + + + + + + + + <li><a href="/docs/code-guidelines/" class="">Code Guidelines</a></li> + + + + + + + - <li><a href="/docs/pull-request/" class="">Best Practice in PR</a></li> ++ <li><a href="/docs/pull-request/" class="">Pull Request</a></li> + + + + + + + + <li><a href="/docs/release-manual" class="">Release Manual</a></li> + + </ul> + + </li> + + <li> + + <span class="nav__sub-title">Best Practice</span> + + + + <ul> + + + + + + + ++ <li><a href="/docs/core-concept/" class="">Core Concept</a></li> ++ ++ ++ ++ ++ ++ ++ + <li><a href="/docs/best-practice-broker/" class="">Broker</a></li> + + + + + + + + <li><a href="/docs/best-practice-producer/" class="">Producer</a></li> + + + + + + + + <li><a href="/docs/best-practice-consumer/" class="">Consumer</a></li> + + + + + + + + <li><a href="/docs/best-practice-namesvr/" class="">NameServer</a></li> + + </ul> + + </li> + + <li> + + <span class="nav__sub-title">Release Notes</span> + + + + <ul> + + + + + + + + <li><a href="/dowloading/releases/" class="">Download</a></li> + + + + + + + + <li><a href="/release_notes/release-notes-4.0.0-incubating/" class="">4.0.0-incubating</a></li> + + </ul> + + </li> + + <li> + + + + + <a href="/docs/roadmap/"><span class="nav__sub-title">RoadMap</span></a> + + + + </li> + + <li> + + + + + <a href="/docs/faq/"><span class="nav__sub-title">FAQ</span></a> + + + + </li> + + </ul> +</nav> + + + </div> + + + <article class="page" itemscope itemtype="http://schema.org/CreativeWork"> + <meta itemprop="headline" content="Motivation"> + <meta itemprop="description" content="In the early stages, we constructed our distributed messaging middleware on the basis of ActiveMQ 5.x(less than 5.3). Our international business uses it for async communication, search, social network activity stream, data pipeline, even in our trade order process. As our trade business throughput rises more and more inconceivably, pressure originating from our messaging cluster also become more and more obvious."> - <meta itemprop="datePublished" content="April 07, 2017"> ++ <meta itemprop="datePublished" content="April 25, 2017"> + <meta itemprop="dateModified" content="December 17, 2016"> + + <div class="page__inner-wrap"> + + <header> + <h1 class="page__title" itemprop="headline">Motivation +</h1> + + </header> + + + <section class="page__content" itemprop="text"> + <p>In the early stages, we constructed our distributed messaging middleware on the basis of ActiveMQ 5.x(less than 5.3). Our international business uses it for async communication, search, social network activity stream, data pipeline, even in our trade order process. As our trade business throughput rises more and more inconceivably, pressure originating from our messaging cluster also become more and more obvious.</p> + +<aside class="sidebar__right"> +<nav class="toc"> + <header><h4 class="nav__title"><i class="fa fa-file-text"></i> On This Page</h4></header> +<ul class="toc__menu" id="markdown-toc"> + <li><a href="#why-rocketmq-" id="markdown-toc-why-rocketmq-">Why RocketMQ ?</a></li> + <li><a href="#rocketmq-vs-activemq-vs-kafka" id="markdown-toc-rocketmq-vs-activemq-vs-kafka">RocketMQ vs. ActiveMQ vs. Kafka</a></li> +</ul> + + </nav> +</aside> + +<h1 id="why-rocketmq-">Why RocketMQ ?</h1> + +<p>Based on our observations and research, with more and more queues and virtual topics in use, ActiveMQ IO module becomes a bottleneck. In some cases, slower consumers can slow down the producers. We tried our best efforts to handle this problems through throttling, circuit breaker or degradation, but it cannot scale out gracefully. So we begin to focus on the popular messaging solution Kafka at that time. Unfortunately, Kafka can not meet our requirements such as low latency and high reliability, see <a href="/rocketmq/how-to-support-more-queues-in-rocketmq/">here</a> for details.</p> + +<p>In this context, we decided to innovate a new messaging middleware to handle a broad set of use cases, ranging from traditional publish/subscribe scenario to demandingly high volume realtime transaction system that tolerates no message loss. We also created a cornerstone product based on RocketMQ, a Platform as a Service (PaaS) product named the +<a href="https://intl.aliyun.com/">Alibaba Cloud Platform</a>. Today, more than 100 companies are using the RocketMQ open source version in their business solutions. We believe RocketMQ can benefit more people, so we would like to share it around the world.</p> + +<p>The following are some different design between RocketMQ, ActiveMQ and Kafkaï¼They are the apacheâs most popular messaging solutions according to <a href="https://github.com/akullpp/awesome-java">awesome-java</a>):</p> + +<h1 id="rocketmq-vs-activemq-vs-kafka">RocketMQ vs. ActiveMQ vs. Kafka</h1> + +<table> + <thead> + <tr> + <th>Messaging Product</th> + <th>Client SDK</th> + <th>Protocol and Specification</th> + <th>Order Message</th> + <th>Message Filter</th> + <th>Server Triggered Redelivery</th> + <th>Persistent Message</th> + <th>Retroactive Consumers</th> + <th>Message Priority</th> + <th>High Availability and Failover</th> + <th>Message Track</th> + <th>Configuration</th> + <th>Management and Operation Tools</th> + </tr> + </thead> + <tbody> + <tr> + <td>ActiveMQ</td> + <td>Java, .NET, C++ etc.</td> + <td>Push model, support OpenWire, STOMP, AMQP, MQTT, JMS</td> + <td>Exclusive Consumer or Exclusive Queues can ensure ordering</td> + <td>Supported</td> + <td>Not Supported</td> + <td>Supports very fast persistence using JDBC along with a high performance journalï¼such as levelDB, kahaDB</td> + <td>Supported</td> + <td>Supported</td> + <td>Supported, depending on storage,if using kahadb it requires a ZooKeeper server</td> + <td>Not Supported</td> + <td>The default configuration is low level, user need to optimize the configuration parameters</td> + <td>Supported</td> + </tr> + <tr> + <td>Kafka</td> + <td>Java, Scala etc.</td> + <td>Pull model, support TCP</td> + <td>Ensure ordering of messages within a partition</td> + <td>Supported, you can use Kafka Streams to filter messages</td> + <td>Not Supported</td> + <td>High performance file storage</td> + <td>Supported offset indicate</td> + <td>Not Supported</td> + <td>Supported, requires a ZooKeeper server</td> + <td>Not Supported</td> + <td>Kafka uses key-value pairs format for configuration. These values can be supplied either from a file or programmatically.</td> + <td>Supported, use terminal command to expose core metrics</td> + </tr> + <tr> + <td>RocketMQ</td> + <td>Java, .NET, C++</td> + <td>Pull model, support TCP, JMS</td> + <td>Ensure strict ordering of messages, have no hot spot problem,and can scale out gracefully</td> + <td>Supported, you can even upload yourself custom-built filter code snippets</td> + <td>Supported</td> + <td>High performance and low latency file storage</td> + <td>Supported timestamp and offset 2 indicates</td> + <td>Not Supported</td> + <td>Supported, Master-Slave model, without another kit</td> + <td>Supported</td> + <td>Work out of box,user only need to pay attention to a few configurations</td> + <td>Supported, rich web and terminal command to expose core metrics</td> + </tr> + </tbody> +</table> + + + </section> + + <footer class="page__meta"> + + + + + + <p class="page__date"><strong><i class="fa fa-fw fa-calendar" aria-hidden="true"></i> Updated:</strong> <time datetime="2016-12-17">December 17, 2016</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=Motivation /docs/motivation/" 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=/docs/motivation/" 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=/docs/motivation/" 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=/docs/motivation/" 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="/docs/quick-start/" class="pagination--pager" title="Quick Start +">Previous</a> + + + <a href="/docs/core-concept/" class="pagination--pager" title="Core Concept +">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 © 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>
